鉴于代码:
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();
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Say i am in someFunc
Null pointer assignment(Run-time error)
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么第二行输出来了.输出的第二行.我认为编译器在未明确指定时提供了复制构造函数.因此,在函数SomeFunc(Sample x)中,应该创建和销毁SomeFunc()的本地对象,它是Sample类型的X,并且main()中的Sample类型对象(s1)应该保持不变,并且应该只在之后释放主要出口.请回答上述行为发生的原因?