c++ 記憶體分配及相關關鍵字
阿新 • • 發佈:2018-12-09
- 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); |
|
|
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw(); |
|
|
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 記憶體池技術