中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

C++棧對象的產(chǎn)生和禁用方式

本篇內(nèi)容介紹了“C++棧對象的產(chǎn)生和禁用方式”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

目前累計服務(wù)客戶近1000家,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗。以網(wǎng)站設(shè)計水平和技術(shù)實力,樹立企業(yè)形象,為客戶提供做網(wǎng)站、網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補等服務(wù)。成都創(chuàng)新互聯(lián)始終以務(wù)實、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對領(lǐng)先技術(shù)的掌握、對創(chuàng)意設(shè)計的研究、對客戶形象的視覺傳遞、對應用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進步。

創(chuàng)建C++棧對象時會移動棧頂指針以“挪出”適當大小的空間,然后在這個空間上直接調(diào)用對應的構(gòu)造函數(shù)以形成一個棧對象,而當函數(shù)返回時,會調(diào)用其析構(gòu)函數(shù)釋放這個對象,然后再調(diào)整棧頂指針收回那塊棧內(nèi)存。在這個過程中是不需要operat or newdelete操作的,所以將operator newdelete設(shè)置為private不能達到目的。當然從上面的敘述中,你也許已經(jīng)想到了:將構(gòu)造函數(shù)或析構(gòu)函數(shù)設(shè)為私有的,這樣系統(tǒng)就不能調(diào)用構(gòu)造析構(gòu)函數(shù)了,當然就不能在棧中生成對象了。

這樣的確可以,而且我也打算采用這種方案。但是在此之前,有一點需要考慮清楚,那就是,如果我們將構(gòu)造函數(shù)設(shè)置為私有,那么我們也就不能用new來直接產(chǎn)生堆對象了,因為new在為對象分配空間后也會調(diào)用它的構(gòu)造函數(shù)啊。所以,我打算只將析構(gòu)函數(shù)設(shè)置為private。再進一步,將析構(gòu)函數(shù)設(shè)為private除了會限制棧對象生成外,還有其它影響嗎?是的,這還會限制繼承。

如果一個類不打算作為基類,通常采用的方案就是將其析構(gòu)函數(shù)聲明為private。

為了限制C++棧對象,卻不限制繼承,我們可以將析構(gòu)函數(shù)聲明為protected,這樣就兩全其美了。如下代碼所示:

class NoStackObject   {   protected   ~NoStackObject() { }   public   void destroy()   {   delete this ;調(diào)用保護析構(gòu)函數(shù)   }   };

接著,可以像這樣使用NoStackObject類:

NoStackObject hash_ptr = new NoStackObject() ;   ... ... 對hash_ptr指向的對象進行操作   hash_ptr-destroy() ;

是不是覺得有點怪怪的,我們用new創(chuàng)建一個對象,卻不是用delete去刪除它,而是要用destroy方法。很顯然,用戶是不習慣這種怪異的使用方式的。所以,我決定將構(gòu)造函數(shù)也設(shè)為private或protected。這又回到了上面曾試圖避免的問題,即不用new,那么該用什么方式來生成一個對象了?我們可以用間接的辦法完成,即讓這個類提供一個static成員函數(shù)專門用于產(chǎn)生該類型的堆對象。(設(shè)計模式中的singleton模式就可以用這種方式實現(xiàn)。)讓我們來看看:

class NoStackObject   {   protected   NoStackObject() { }   ~NoStackObject() { }   public   static NoStackObject creatInstance()   {   return new NoStackObject() ;調(diào)用保護的構(gòu)造函數(shù)   }   void destroy()   {   delete this ;調(diào)用保護的析構(gòu)函數(shù)   }   };

現(xiàn)在可以這樣使用NoStackObject類了:

NoStackObject hash_ptr = NoStackObjectcreatInstance() ;   ... ... 對hash_ptr指向的對象進行操作   hash_ptr-destroy() ;   hash_ptr = NULL ; 防止使用懸掛指針

“C++棧對象的產(chǎn)生和禁用方式”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

當前題目:C++棧對象的產(chǎn)生和禁用方式
文章起源:http://www.rwnh.cn/article24/pcoece.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機、網(wǎng)站策劃服務(wù)器托管、App設(shè)計、定制開發(fā)

廣告

聲明:本網(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)

外貿(mào)網(wǎng)站制作
股票| 渭南市| 洱源县| 克东县| 四子王旗| 嘉鱼县| 蕉岭县| 元江| 九龙坡区| 固镇县| 四川省| 随州市| 河源市| 澳门| 阳曲县| 乌海市| 彰化县| 昌都县| 崇文区| 钦州市| 原平市| 全州县| 扶绥县| 黄平县| 洪泽县| 长垣县| 略阳县| 丰城市| 深州市| 鲁甸县| 衡山县| 长治县| 永春县| 霞浦县| 红桥区| 北海市| 邳州市| 德昌县| 邹城市| 马边| 临沧市|