C++中的new

作者: broadroad | 来源:发表于2016-11-25 10:40 被阅读0次

C++的设计者希望它能处理各种各样的问题。因此,C++的某些特征对一些特殊的应用非常重要,这其中控制内存分配就是重要的一环。new和delete正是这场分配内存的游戏中的主脚。

C++中的new其实包含三个部分:new operator , operator new, placement new

通常我们在c++中使用的new其实指的是new operator,例如:

string *str = new string("it is a string");

实际上,在执行这个表达式的时候,执行了三步操作

1. new 表达式调用一个operator new(或者是operator new[])的标准库函数,该函数来分配一快足够大的、原始的、未命名的内存空间,用来存储特定类型的对象(或者对象数组)

2.编译器运行相应的构造函数以构造这些对象,并为其传入初值

3.对象被分配了空间并构造完成,返回一个指向该对象的指针

如果应用程序希望自己控制内存分配的过程,则他们需要定义自己的operator new函数和operator delete。编译器发现一条new表达式后,在程序中查找可供调用的operator函数。如果被分配的对象是类类型,则编译器现在类及其基类的作用域中查找,否则编译器在全局作用域查找,如果没找到,才使用标准库的版本,总体来说,顺序如下:

1.类及其基类

2.全局作用域

3.标准库

注意:1.在类里定义operator new函数会被隐式的声明为静态的 2. 不允许用户重载 void *operator new(size_t, void*); 这个函数,这个函数是被标准库使用的

相关文章

  • new失败抛出异常吗?

    new/delete 在C++中动态分配与释放内存是通过new/delete和new []/delete []实现...

  • C++中的new

    C++的设计者希望它能处理各种各样的问题。因此,C++的某些特征对一些特殊的应用非常重要,这其中控制内存分配就是重...

  • c++ new 和delete的种种

    new/delete动态管理对象,new[]/delete[]动态管理对象数组。 C++中,把int 、char....

  • C++ 中的new 和 java中的 new

    C++:创建实例 new创建的类对象需要指针来接收,该类对象使用完毕后需要使用delete销毁 new创建的对象使...

  • C++中的新成员

    C++中的动态内存分配 C++中通过new关键字进行动态内存申请 C++中的动态内存申请是基于类型进行的 dele...

  • 使用giflib库加载gif图片

    1、创建c++工程 通过 file -> new -> new project,创建一个新的c++工程。 2、配置...

  • 关于C++不了解的那些事

    关于C++不了解的那些事 new & delete C++类实例化的两种方式:new和不new的区别 - Zope...

  • leet code 笔记

    结构体生成内存申请 malloc与new,C++中的指针与引用,C++struct与class的区别 new 不但...

  • C++中New关键字和命名空间

    动态内存分配 C++中的动态内存分配C++中通过new关键字进行动态内存申请C++中的动态内存申请是基于类型进行的...

  • C++的new和delete详解

    new和delete的内部实现 C++中如果要在堆内存中创建和销毁对象需要借助关键字new和delete来完成。比...

网友评论

    本文标题:C++中的new

    本文链接:https://www.haomeiwen.com/subject/uevipttx.html