您好,登錄后才能下訂單哦!
在使用new的時(shí)候做了兩件事:
1、調(diào)用operator new分配空間
2、調(diào)用構(gòu)造函數(shù)初始化對象
在使用delete的時(shí)候也做了兩件事:
1、調(diào)用析構(gòu)函數(shù)清理對象
2、調(diào)用operator delete函數(shù)釋放空間
在使用new[N]的時(shí)候也做了兩件事:
1、調(diào)用operator new分配空間
2、調(diào)用N次構(gòu)造函數(shù)初始化N個(gè)對象
在使用delete[]的時(shí)候也做了兩件事:
1、調(diào)用N次析構(gòu)函數(shù)清理N個(gè)對象
2、調(diào)用operator delete函數(shù)釋放空間
定位new表達(dá)式:定位new表達(dá)式是在以分配的原始空間中調(diào)用構(gòu)造函數(shù)初始化一個(gè)對象。
new(place_address) type;
new(place_address) type(initializer-list);
place_address必須是一個(gè)指針,initializer-list是初始化列表
利用mallco/free和定位new表達(dá)式來模擬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個(gè)A類型空間 A *pa = (A *)malloc(sizeof(A)); new(pa)A(1); //調(diào)用構(gòu)造函數(shù) pa->~A(); //調(diào)用析構(gòu)函數(shù) free(pa); //分配10個(gè)A類型的空間 A* pa = (A *)malloc(sizeof(A)*10); for (int i = 0; i < 10; i++) //調(diào)用十次構(gòu)造函數(shù) { new(pa + i) A(i); } for (int i = 0; i < 10; i++) //調(diào)用十次析構(gòu)函數(shù) { (pa + i)->~A(); } free(pa); }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。