C++中的new

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*); 这个函数,这个函数是被标准库使用的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容