這裏是我的C++代碼:由於對象是按值傳遞給SomeFunc的析構函數析構函數在C++中是如何工作的
Say i am in someFunc
Null pointer assignment(Run-time error)
這裏:
class Sample
{
public:
int *ptr;
Sample(int i)
{
ptr = new int(i);
}
~Sample()
{
delete ptr;
}
void PrintVal()
{
cout << "The value is " << *ptr;
}
};
void SomeFunc(Sample x)
{
cout << "Say i am in someFunc " << endl;
}
int main()
{
Sample s1= 10;
SomeFunc(s1);
s1.PrintVal();
}
它返回我像輸出當控件從函數返回時調用對象
我應該對嗎?如果是,那麼爲什麼會發生?什麼是這個解決方案?
參見:[三規則(http://stackoverflow.com/questions/4172722/what-is-the-rule -of-three) –
編譯器正在爲您構建一個默認的複製構造函數,無論何時在您的類中分配內存(以及賦值運算符)時,都需要重寫 - 請參閱下面的Rule of Three鏈接 – kfmfe04