[英]C++ - Destructor is called more times than expected
考慮以下代碼:
class C1
{ public:
C1(){ cout<<"CONSTR WAS HERE"<<endl; }
C1(const C1&ob){ cout<<"COPY CONSTR WAS HERE"<<endl; }
~C1(){ cout<<"DESTR WAS HERE"<<endl; }
}
void f1(C1 x){ }
int main()
{
C1 c1;
f1(c1);
}
如果我們按原樣運行代碼,我們得到:
CONSTR WAS HERE
COPY CONSTR WAS HERE
DESTR WAS HERE
DESTR WAS HERE
從我的觀點來看,這是完全可以理解的。 但是,如果我們將函數“f1”修改為:
C1 f1(C1 x){}
代替
void f1(C1 x){}
我們得到:
CONSTR WAS HERE
COPY CONSTR WAS HERE
DESTR WAS HERE
DESTR WAS HERE
DESTR WAS HERE
我不太清楚為什么
啟用警告:
警告:函數中沒有return語句返回非void [-Wreturn-type]
您的程序中有未定義的行為 ,這意味着任何事情都可能發生。 編譯器很可能“在這里返回一個未定義的C1
實例”,這會導致析構函數被調用。
程序可能會崩潰或執行任何其他操作,具體取決於您的編譯器/標志/機器。
修改C1 f1(C1 x){}
實際返回一些內容,輸出將按預期進行( 演示 )
C1 f1(C1 x){ return {};}
CONSTR就在這里
COPY CONSTR就在這里
CONSTR就在這里
DESTR就在這里
DESTR就在這里
DESTR就在這里
否則您的代碼會顯示未定義的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.