new operator
new operator是我们常用的new,他执行三个操作
- 分配内存:new 操作符首先会根据指定的类型分配足够大小的内存空间,以存储对象的数据成员。
- 调用构造函数:new 操作符会在分配的内存空间上调用对象的构造函数,以初始化对象的数据成员。
- 返回指针:new 操作符返回一个指向新分配的对象的指针,该指针可以用于访问和操作对象。
Type* ptr = new Type(args); // 使用 new 操作符创建对象
可以使用delete来回收这块内存
operator new
operator new通常和placement new搭配使用,他只完成两个动作
- 分配内存:operator new 操作符首先会根据指定的类型分配足够大小的内存空间,以存储对象的数据成员。
- 返回指针:operator new 操作符返回一个指向新分配的对象的指针,该指针可以用于访问和操作对象。
Type* ptr = new Type; // 使用 operator new 分配 Type 类型的内存
可以使用delete来回收内存
placement new
“Placement new” 是另一种在已经分配的内存上构造对象的机制。它使用了定位 new 运算符,将对象构造在预先分配的内存上,而不是分配新的内存。这在某些情况下非常有用,例如需要在特定的内存位置上构造对象,或者在固定的内存缓冲区中管理对象的生命周期。
new (ptr) Type(arguments); // 将对象构造在 ptr 指向的内存上
使用placement new构造出的对象仅可使用显示调用析构函数的方法来回收该空间
ptr->~Type(); // 手动调用对象的析构函数