1. 程式人生 > >c++ 記憶體分配及相關關鍵字

c++ 記憶體分配及相關關鍵字

  • allocator 動態分配記憶體,將記憶體分配和物件構造分開。
  • new、delete 和 new[]/delete[]的區別
int *pia = new int[10];
delete []pia;

1.對於非內建物件,在 new [] 時將多分配 4 個位元組,用來儲存陣列的大小。呼叫delete[]時會先取出陣列大小,傳入 operator delete[] 函式的引數不是陣列物件的指標 pAa,而是 pAa 的值減 4。

2.使用 new [] 用 delete 來釋放物件的提前是:物件的型別是內建型別或者是無自定義的解構函式的類型別

如果是自定義解構函式的類,用delete只釋放了第一個物件

  • new的使用
throwing (1)
void* operator new (std::size_t size) throw (std::bad_alloc);
nothrow (2)
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw();
placement (3)
void* operator new (std::size_t size, void* ptr) throw();

placement new 的方法是實現在ptr所指地址上構建一個物件(通過呼叫其建構函式)。

A* a = new A; //呼叫throwing(1)
A* a = new(std::nothrow) A; //呼叫nothrow(2)
char buf[100]; new(buf) A(); //placement 記憶體池技術