#includeusing namespace std;
struct a
a(const a&)
~a()
};a f()
a g()
int main()
vs2019結果:
f
copy constructor
destructor
gdestructor
destructor
mingw64(g++ v8.3.0; 10.1.0)結果:
f
gdestructor
destructor
可以看到,在vs下,函式返回類物件時,如果是在return語句後面構造的,則不執行拷貝建構函式,直接賦值給承接返回值的變數,就像承接返回值的變數和返回值是乙個例項一樣;如果是在函式體內部構造,則就像以下**一樣執行:
a returnvalue;
a var(returnvalue);//拷貝建構函式
//銷毀returnvalue
而在g++下,都是按照第一種情況處理的。
今天才發現,這坑踩過多少次了
°(°ˊдˋ°) °
C 函式返回值為物件時,構造析構函式的執行細節
看如下 複製 如下 include class testconstructor testconstructor testconstructor const testconstructor testobj testconstructor operator const testconsqulkrjmst...
《類和物件》 析構函式
概念 前面通過建構函式的學習,我們知道乙個物件時怎麼來的,那乙個物件又是怎麼沒呢的?析構函式 與建構函式功能相反,析構函式不是完成物件的銷毀,區域性物件銷毀工作是由編譯器完成的。而 物件在銷毀時會自動呼叫析構函式,完成類的一些資源清理工作。特性 析構函式是特殊的成員函式。其特徵如下 析構函式名是在類...
C 類析構函式
析構函式是c 釋放類物件的函式,如果在類中不寫析構函式,c 編譯器會自動補上析構函式。如果人為定義了析構函式,那麼會呼叫人為定義的。預設析構函式不會釋放成員指標變數所指向的記憶體空間,如果要釋放的話,還需要人為定義釋放。析構函式在物件釋放的時候自動呼叫,在delete 刪除物件的時候,也會呼叫析構函...