C++中動態分配數組的分析

//-----------------------一下爲原文

看一個小例子:

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個字節中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章