Effective C++中第21個(gè)原則,因?yàn)橐檬且赶蚰骋汛嬖诘膶ο蟮?,但如果該對象某一瞬間突然消失了,這個(gè)引用被架空了,那就出錯(cuò)了。
為了證實(shí)這一點(diǎn)作者舉了一個(gè)有理數(shù)相乘的例子。有這個(gè)一個(gè)有理數(shù)類,其中有一個(gè)有理數(shù)相乘的成員函數(shù),該成員函數(shù)返回該有理數(shù)類的對象。在此例中該對象是一個(gè)本地對象,什么叫本地對象呢?就是一個(gè)普通的,局部的對象,它隨著作用域的結(jié)束而被自動(dòng)銷毀。因?yàn)榫邆溥@一性質(zhì),一旦你把這個(gè)函數(shù)的返回值賦給某一變量,然后該函數(shù)使命完成被自動(dòng)銷毀,那么它所返回的對象也就被自動(dòng)銷毀了,那么被賦值的變量的行為就未定義了。
然后作者又舉了動(dòng)態(tài)分配對象的例子。因?yàn)槭莕ew一個(gè)對象出來,所以它肯定是要調(diào)用構(gòu)造函數(shù)進(jìn)行初始化工作的,但是你往往找不到一個(gè)合理的時(shí)機(jī)進(jìn)行析構(gòu)工作,從而導(dǎo)致資源泄露。
因?yàn)樯鲜鰞蓚€(gè)例子都是因?yàn)闉楸镜貙ο笳{(diào)用構(gòu)造函數(shù)而導(dǎo)致的,那么如果把本地變量寫成static的不就避免了構(gòu)造函數(shù)和析構(gòu)函數(shù)的問題了么。作者的回答是no。因?yàn)閟tatic對象是靜態(tài)分配,它在內(nèi)存中的位置是固定的,這樣多個(gè)操作對static對象進(jìn)行修改,static對象最后的內(nèi)容是最后修改的那個(gè)內(nèi)容,基于此種性質(zhì)。如果你的業(yè)務(wù)邏輯是多個(gè)對象之間才存在的,那么這樣做的后果肯定不是你想要的。
最后作者給出了自己的建議——你既然要返回一個(gè)對象,那就直接返回一個(gè)對象。
原則21:必須返回對象時(shí),別妄想返回其引用
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
- Jni數(shù)據(jù)類型 Jni方法 來自 http://blog.chinaunix.net/uid-22028680-i...
- 一個(gè)黑影從陽臺(tái)門那里走了進(jìn)來。他伸手摸了摸我對床那姑娘的額頭,又或許是試探了下她的鼻息,他說,睡著了呢。他又走到我...