給予代碼:複製構造函數:當存儲空間被釋放時?
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();
}
輸出是:
Say i am in someFunc
Null pointer assignment(Run-time error)
我無法理解爲什麼輸出的第二行來。輸出的第二行。我認爲編譯器在未明確指定時提供了一個拷貝構造函數。因此,在函數SomeFunc(Sample x)中,應該創建並銷燬樣本類型爲X的SomeFunc()的本地對象,並且main()中的Sample類型對象(s1)應該保持不變,只應在主要出口。請回答爲什麼上述行爲正在發生?
非常感謝你給出這樣的答案! :) – Abhay 2012-03-16 05:53:24
+1爲編輯提及轉換構造函數的情況,雖然這不是由於RVO – Sanish 2012-03-16 06:46:02
@Als導致的原因:我今天創建了自己的Stack Exchange賬戶,我很驚訝答案的質量和迴應迅速。 :) – Abhay 2012-03-16 13:27:41