我有一個帶有指向整數的指針的類。當變量仍然活着時被調用的C++析構函數
然後一個靜態函數將返回該整數的值。
我注意到當調用靜態函數時,每次都會爲該對象調用析構函數。
我不明白爲什麼會發生這種行爲。
class Dog
{
public:
Dog(int val){
this->pVal = new int(val);
}
~Dog(){
delete this->pVal;
}
static int GetVal(Dog d){
return *(d.pVal);
}
int *pVal;
};
這是班級。
這是我的測試驅動程序代碼。
Dog fido(20);
std::cout << Dog::GetVal(fido); //20 and destructor for fido called
Dog rex(21);
std::cout << Dog::GetVal(fido); //21 but should be 20
std::cout << Dog::GetVal(rex); // should be 21
我注意到兩個狗對象都住在不同的內存地址,但是int指針居住在同一個地址。我相信這是因爲調用GetVal時會調用fido的析構函數,但我不知道爲什麼會出現這種行爲。
如果你使用了unique_ptr而不是手動管理生命週期,那麼你的編譯器向你顯示了你的錯誤(代碼不會編譯)。 – 2017-10-10 21:10:49
僅僅因爲對另一個問題的回答適用於此問題,並不會使此問題重複。這個問題是通過證明問題而提出的; 「重複」詢問特定主題。除非你已經知道這個問題代碼的問題,否則你不會知道所謂的重複是相關的。 – Darryl
我同意上面的Darryl的評論。投票重新開放。 – dasblinkenlight