Effective C++中第21個原則,因為引用是要指向某已存在的對象的,但如果該對象某一瞬間突然消失了,這個引用被架空了,那就出錯了。
為了證實這一點作者舉了一個有理數相乘的例子。有這個一個有理數類,其中有一個有理數相乘的成員函數,該成員函數返回該有理數類的對象。在此例中該對象是一個本地對象,什么叫本地對象呢?就是一個普通的,局部的對象,它隨著作用域的結束而被自動銷毀。因為具備這一性質,一旦你把這個函數的返回值賦給某一變量,然后該函數使命完成被自動銷毀,那么它所返回的對象也就被自動銷毀了,那么被賦值的變量的行為就未定義了。
然后作者又舉了動態分配對象的例子。因為是new一個對象出來,所以它肯定是要調用構造函數進行初始化工作的,但是你往往找不到一個合理的時機進行析構工作,從而導致資源泄露。
因為上述兩個例子都是因為為本地對象調用構造函數而導致的,那么如果把本地變量寫成static的不就避免了構造函數和析構函數的問題了么。作者的回答是no。因為static對象是靜態分配,它在內存中的位置是固定的,這樣多個操作對static對象進行修改,static對象最后的內容是最后修改的那個內容,基于此種性質。如果你的業務邏輯是多個對象之間才存在的,那么這樣做的后果肯定不是你想要的。
最后作者給出了自己的建議——你既然要返回一個對象,那就直接返回一個對象。
原則21:必須返回對象時,別妄想返回其引用
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
推薦閱讀更多精彩內容
- Jni數據類型 Jni方法 來自 http://blog.chinaunix.net/uid-22028680-i...