C++中New的使用简介
程序员文章站
2022-06-21 13:24:08
...
(转自:https://blog.csdn.net/u012278016/article/details/79930924 )
C++中一提到new,至少可能代表以下三种含义:new operator、operator new、placement new
new operator(new expression)
当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:
- 获得一块内存空间
- 调用构造函数
- 返回正确的指针
假如我们定义了如下一个类A:
class A{
int i;
public:
A(int _i) :i(_i*_i) {}
void Say() { printf("i=%dn", i); }
};
//调用new:
A* pa = new A(3);
那么上述动态创建一个对象的过程大致相当于以下三句话(只是大致上):
A* pa = (A*)malloc(sizeof(A));
pa->A::A(3);
return pa;
operator new
new的第二种形态——operator new,new operator的第一步分配内存实际上是通过调用operator new来完成的,这里的new实际上是像加减乘除一样的操作符,因此也是可以重载的。operator new默认情况下首先调用分配内存的代码,尝试得到一段堆上的空间,如果成功就返回,如果失败,则转而去调用一个new_hander,然后继续重复前面过程。
placement new
new的第三种形态——placement new,new operator的第二部定位构造实际上是通过调用placement new来完成的,也就是在取得了一块可以容纳指定类型对象的内存后,在这块内存上构造一个对象。
对头文件或<new.h>的引用是必须的,这样才可以使用placement new。
上一篇: 【JS】页面字体布局
下一篇: 天学网人工智能学院5月班学员扬帆起航