日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

控制C++的类只能在堆分配或只能在栈分配

發(fā)布時間:2025/7/25 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 控制C++的类只能在堆分配或只能在栈分配 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

//HeapOnly.cpp??

? #include?? <iostream>??
? using?? namespace?? std;??
???

?

只能在堆上分配空間:我們可將類的析構(gòu)函數(shù)用private來修飾,也就是把析構(gòu)函數(shù)私有化,因為自動變量與靜態(tài)變量的對象都在釋放空間的時候都需要訪問析構(gòu)函數(shù)。若析構(gòu)函數(shù)私有,外面就不能調(diào)用,這時候會產(chǎn)生編譯錯誤,這樣就達到了只能在堆上分配空間了。但是,把析構(gòu)函數(shù)私有化,那么我們就不能調(diào)用delete了, 因為它也需要訪問析構(gòu)函數(shù)。這就要求我們自己去提供回收內(nèi)存空間的函數(shù),以防內(nèi)存泄漏。
? class?? HeapOnly??
? {??
? public:??
? HeapOnly()?? {?? cout?? <<?? "constructor."?? <<?? endl;?? }??
? void?? destroy?? ()?? const?? {?? delete?? this;?? }??
? private:??
? ~HeapOnly()?? {}????
? };??
???
? int?? main()??
? {??
? HeapOnly?? *p?? =?? new?? HeapOnly;??
? p->destroy();??
? // HeapOnly?? h;??
? // h.Output();??
???
? return?? 0;??
? }??
? //StackOnly.cpp??
? //2005.07.18------2009.06.05??

? #include?? <iostream>??
? using?? namespace?? std;??

只能在棧上分配空間:可將 T:: operator new 全部私有,因為要在堆上分配空間,需要用到new來實現(xiàn),當(dāng)你把new私有化,我們就不能調(diào)用new T()這樣的語句,這樣可以達到只能在棧上來分配空間了。???


? class?? StackOnly??
? {??
? public:??
? StackOnly()?? {?? cout?? <<?? "constructor."?? <<?? endl;?? }??
? ~StackOnly()?? {?? cout?? <<?? "destructor."?? <<?? endl;?? }??
? private:??
? void*?? operator?? new?? (size_t);??
? };??
???
? int?? main()??
? {??
? StackOnly?? s;???????????????????????????????????????????????????????????? //okay??
? StackOnly?? *p?? =?? new?? StackOnly;?????????????????????????? //wrong??
???
? return?? 0;??
? }

?

在類設(shè)計中,類的成員如果是在棧中,那么也需要顯識地在類的析構(gòu)函數(shù)中調(diào)用成員的析構(gòu)函數(shù),否則就會造成內(nèi)存泄露

轉(zhuǎn)載于:https://www.cnblogs.com/cplover/p/3371946.html

總結(jié)

以上是生活随笔為你收集整理的控制C++的类只能在堆分配或只能在栈分配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。