只能在堆內(nèi)存上實例化的類:將析構(gòu)函數(shù)定義為private,在棧上不能自動調(diào)用析構(gòu)函數(shù),只能手動調(diào)用。也可以將構(gòu)造函數(shù)定義為private,但這樣需要手動寫一個函數(shù)實現(xiàn)對象的構(gòu)造。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了桂平免費建站歡迎大家使用!
只能在棧內(nèi)存上實例化的類:將函數(shù)operator new和operator delete定義為private,這樣使用new操作符創(chuàng)建對象時候,無法調(diào)用operator new,delete銷毀對象也無法調(diào)用operator delete。
#include <iostream> using namespace std; //只能在堆內(nèi)存上實例化的類 class CHeapOnly { public: CHeapOnly() { cout << "Constructor of CHeapOnly!" << endl; } void Destroy() const { delete this; } private: ~CHeapOnly() { cout << "Destructor of CHeapOnly!" << endl; } }; //只能在棧內(nèi)存上實例化的類,就是不能使用new來構(gòu)造類,把operator new私有化 class CStackOnly { public: CStackOnly() { cout << "Constructor of CStackOnly!" << endl; } ~CStackOnly() { cout << "Destrucotr of CStackOnly!" << endl; } private: void* operator new(size_t size) { } void operator delete(void * ptr) { } }; int main() { CHeapOnly* pHeap = new CHeapOnly; pHeap->Destroy(); CStackOnly objStack; return 0; } //只能在堆內(nèi)存上實例化的類 // 下面一個類也只能在堆內(nèi)存上生成,將構(gòu)造函數(shù)和析構(gòu)函數(shù)都定義為private, //但是可以通過類的static函數(shù)創(chuàng)建對象,不過這個對象是不能被繼承的。 class FinalClass { public: static FinalClass* GetInstance() { cout << "Constructor of the class" << endl; return new FinalClass; } static void DeleteInstance(FinalClass* pInstance) { cout << "Destructor of the class" << endl; delete pInstance; pInstance = 0; } private: FinalClass() {} ~FinalClass() {} }; int main() { FinalClass* fc = FinalClass::GetInstance(); FinalClass::DeleteInstance(fc); return 0; }
新聞名稱:設(shè)計一個只能在堆內(nèi)存上實例化的類和一個只能在棧內(nèi)存上實例化的類
當前地址:http://www.muchs.cn/article14/ijsege.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、網(wǎng)站內(nèi)鏈、自適應網(wǎng)站、用戶體驗、定制開發(fā)、網(wǎng)頁設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)