避免返回物件內部構件的「控制代碼」

2021-07-11 18:46:49 字數 919 閱讀 1738

下面的一些想法來自《effective c++》中的 item 28: 避免返回物件內部構件的「控制代碼」 。

避免返回物件內部構件的控制代碼(引用,指標,或迭代器(也算是指標))。

如果返回物件內部構建的控制代碼(引用、指標),當物件先於內部控制代碼析構後,內部控制代碼會「空懸」。這裡的「空懸」即指標無意義的指向,會引起堆記憶體無法釋放。

如果返回物件內部的物件,不會有問題,物件會自動析構。

我想:不光要避免返回物件內部構建的控制代碼,對於「動態」(堆)物件,也要謹慎,在釋放「動態」物件之前,一定要釋放其內部的控制代碼。

萬一要對物件內部控制代碼操作,一定要獲取到物件的指標或引用,如果使用臨時變數只會改變臨時變數的拷貝,並不會改變物件的本體。當返回乙個臨時變數的拷貝時只有值,沒有位址!!!

避免返回物件內部構件的控制代碼,這樣也會提高封裝性,幫助 const 成員函式產生 cosnt 效果。

#include using namespace std;

class point

void setx(int newval)

void sety(int newval)

int &getx()

int gety()

~point()

//point& upperleft() const

//如果沒有&,返回的是pdata->ulhc的拷貝,而非pdata->ulhc本身;後續對pdata->ulhc的拷貝賦值,並不會改變它的本體

point& upperleft() const

//const point& upperleft() const

//返回const 型別,會使物件內部構建唯讀,提高封裝性

point& lowerright() const

void print() const

{ cout<<"upperleft: "<

避免返回內部資料的控制代碼

假設b是乙個const string物件 class string const string b hello world b是乙個const物件 既然b為const,最好的情況當然就是無論現在還是以後,b的值總是 hello world 這就寄希望於別的程式設計師能以合理的方式使用b了。特別是,千萬...

學習 避免返回內部資料的控制代碼

請看物件導向世界裡發生的一幕 物件a 親愛的,永遠別變心!物件b 別擔心,親愛的,我是const。然而,和現實生活中一樣,a會懷疑,能相信b嗎?同樣地,和現實生活中一樣,答案取決於b的本性 其成員函式的組成結構。假設b是乙個const string物件 class string const stri...

c 避免返回內部資料的控制代碼

c primer中說了,在乙個物件呼叫其成員函式時,它隱含的乙個形參this指標。例如,我們定義了乙個函式ctest ttt 實際上在編譯器中該函式的定義就是ctest ttt ctest const this 該this指標所指向的內容可以改變,但是該this指標不可以被改變。當我們用ctest的...