c++: 獲取delete[]中的數組大小
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
看一個小例子:
1#include <iostream>23using namespace std;45class A {6public:7 A() { cout << "A::A()" << endl; }8 ~A() { cout << "A::~A()" << endl; }9};1011int main() {12 A* a = new A[5];13 delete[] a;1415 return 0;16}編譯執行輸出:
A::A() A::A() A::A() A::A() A::A() A::~A() A::~A() A::~A() A::~A() A::~A()
上面的輸出顯示程序正確釋放了5個A對象。
現在的問題是:我們在delete[] a語句中并沒有給出對象數組的大小,那么系統是如何做到正確釋放對象個數的呢?
接著看下面的程序段:
1#include <iostream>23using namespace std;45class A {6public:7 A() { cout << "A::A()" << endl; }8 ~A() { cout << "A::~A()" << endl; }9};1011int main() {12 A* a = new A[5];1314 int addr = (int)a - 4;15 cout << "delete[] size = " << *(int*)addr << endl;1617 delete[] a;1819 return 0;20}編譯執行:
A::A() A::A() A::A() A::A() A::A() delete[] size = 5 A::~A() A::~A() A::~A() A::~A() A::~A()
結論:
系統在new一個數組對象的時候會把數組大小存放在返回的內存地址的前4個字節中。
