程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 《Effective C++》學習筆記條款21 必須返回對象時,別妄想返回其reference

《Effective C++》學習筆記條款21 必須返回對象時,別妄想返回其reference

編輯:C++入門知識

條款21:必須返回對象時,別妄想返回其reference
當我們領悟條款20中傳值的開銷後,總是避免於少用傳值,然而在返回對象時,要格外小心了,因為你可能:傳

遞一些引用或指針指向其實已經不存在的對象。這可不是件好事。

任何時候看到一個reference聲明式,你都應該立刻問自己,它的另一個名稱是什麼?

函數創建新對象的途徑有二:在棧空間和堆空間

棧上:即在函數內的局部變量。局部變量在函數返回後就沒有存在的意義,若還對它“念念不忘”,將帶來災難性

後果。所以傳引用在棧上不可行。

堆上:在堆上構造一個對象,並返回。看似可行,也埋下了資源洩漏的危險。誰該對這對象實施delete呢?別把這

種對資源的管理寄托完全寄托於用戶。所以傳引用在堆上不可行。

可能還有一種想法:把“讓返回的引用指向一個被定義於函數內部的靜態對象”。出於我們對多線程安全性的疑

慮,以及當線程中兩個函數對單份對象的處理也可能帶來不可測行為。所以靜態對象也是不可行的。

一個“必須返回新對象”的函數的正確寫法是:就讓那個函數返回一個新對象。

編譯器實現者實行最優化,用以改善產出碼的效率卻不改變其觀察的行為。所以我們還是老老實實的返回一個對

象吧。
請記住:

  • 絕不要返回pointer或reference指向一個local stack對象,或返回reference指向一個heap-allocated對象,或返回pointer或reference指向一個local static對象而有可能同時需要多個這樣的對象。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved