C 總結 關於函式返回物件析構的問題

2021-07-02 23:40:56 字數 500 閱讀 5317

class person 

~person()

int main()

就是下面這個函式返回的是乙個引用

因為返回是引用並且這個物件是外部定義的,所以返回引用沒有任何問題

person &person::changename()
下面這個返回引用就會出問題

person &person::changename()
問題在於,函式內部定義的物件,必須要在函式結束的時候**。然而這個函式,卻把定義的物件本身返回了,導致函式內部定義的這個物件不能析構。導致記憶體洩露。

所以如果返回函式內部定義的物件一定不要返回引用

下面是正確的

這時返回物件p的副本,原來定義的p在函式結束以後就析構了

person person::changename()

關於類的析構函式總結

析構函式的功能是用來釋放乙個物件,在物件刪除前,用它做一些記憶體釋放等收尾工作。乙個類只能定義乙個析構函式 析構函式不能過載 析構函式和建構函式一樣不能加return 也不用加關鍵字void 析構函式名識別符號就是在類名識別符號符號前面加 符號 person.h 標頭檔案 pragma once c...

C 函式返回類物件時是否執行析構函式

includeusing namespace std struct a a const a a a f a g int main vs2019結果 f copy constructor destructor gdestructor destructormingw64 g v8.3.0 10.1.0 ...

c 物件模型 虛擬析構函式

看 inside the c object model 第二章,彙總一下一些知識點 作為通常原則,如果乙個類定義了虛函式,那麼它的析構函式就應該定義成虛函式。因為定義了虛函式則意味著這個類會被繼承,並且會通過基類的指標指向子類,從而得到多型。因此,基類的析構函式是否為虛函式將決定子類的物件是否被析構...