c++: 獲取delete[]中的數組大小
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
看一個小例子:
1
#include <iostream>
2
3
using
namespace
std;
4
5
class
A {
6
public
:
7
A() { cout <<
"A::A()"
<< endl; }
8
~A() { cout <<
"A::~A()"
<< endl; }
9
};
10
11
int
main() {
12
A* a =
new
A[5];
13
delete
[] a;
14
15
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>
2
3
using
namespace
std;
4
5
class
A {
6
public
:
7
A() { cout <<
"A::A()"
<< endl; }
8
~A() { cout <<
"A::~A()"
<< endl; }
9
};
10
11
int
main() {
12
A* a =
new
A[5];
13
14
int
addr = (
int
)a - 4;
15
cout <<
"delete[] size = "
<< *(
int
*)addr << endl;
16
17
delete
[] a;
18
19
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個字節中。