C++ new操作符實現

目錄

 

一、new操作符

二、operator new

三、placement new


一、new操作符

C++中new操作符是語言內置的,不能被重載,實現了兩個功能:內存分配、調用對象構造函數。其中內存分配調用標準函數operator new,聲明如下:

void * operator new(size_t size);

釋放內存時使用delete運算符,底層會調用標準函數operator delete來釋放內存。

二、operator new

返回一個未初始化的地址,其中size來確定分配多少內存。new操作符類似於實現瞭如下功能:

void *memory = operator new(sizeof(object));
object obj() on memory;

即operator new用來分配內存,而且可以被重載。對應釋放內存函數爲operator delete。

三、placement new

placement new使用如下:

class A {
public:
    int a;
};
char *buf = new char[sizeof(A) + sizeof(int)]; // 堆分配
// 或 char buf[sizeof(A) + sizeof(int)];       // 棧分配
A *obj = new(buf) A();

從實例中我們可以看到placement new是在一個已經分配好的內存中(棧或者堆中)構造一個新的對象。

那placement new對應的內存如何釋放呢?

  1. 先釋放對象:obj->~A()
  2. 再析構內存:如果對應內存是堆分配delete []buf;如果對應內存是棧分配無需手動釋放
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章