您好,登錄后才能下訂單哦!
在使用new的時候做了兩件事:
1、調用operator new分配空間
2、調用構造函數初始化對象
在使用delete的時候也做了兩件事:
1、調用析構函數清理對象
2、調用operator delete函數釋放空間
在使用new[N]的時候也做了兩件事:
1、調用operator new分配空間
2、調用N次構造函數初始化N個對象
在使用delete[]的時候也做了兩件事:
1、調用N次析構函數清理N個對象
2、調用operator delete函數釋放空間
定位new表達式:定位new表達式是在以分配的原始空間中調用構造函數初始化一個對象。
new(place_address) type;
new(place_address) type(initializer-list);
place_address必須是一個指針,initializer-list是初始化列表
利用mallco/free和定位new表達式來模擬new/delete和new[]/delete[]:
例:
class A { public: A(int a=2) :_a(a) { cout << "A()"<< endl; } void Show() { cout << _a << endl; } ~A() { cout << "~A()" << endl; } private: int _a; }; void test() { //分配1個A類型空間 A *pa = (A *)malloc(sizeof(A)); new(pa)A(1); //調用構造函數 pa->~A(); //調用析構函數 free(pa); //分配10個A類型的空間 A* pa = (A *)malloc(sizeof(A)*10); for (int i = 0; i < 10; i++) //調用十次構造函數 { new(pa + i) A(i); } for (int i = 0; i < 10; i++) //調用十次析構函數 { (pa + i)->~A(); } free(pa); }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。