我试图弄清楚这段代码的输出,但是由于某种原因我无法输出,它给了我一个错误:“1 [main] Q1c 5752 open_stackdumpfile:将堆栈跟踪信息转储到Q1c.exe.stackdump”。

double *dp=new double(1.2);
auto_ptr <double> autodp1(dp);
auto_ptr <double> autodp2=autodp1;
cout<<*autodp1<<endl;

我只想知道它什至会打印出来。

注意:这个问题在过去的试卷中,仅供修订。

最佳答案

代码*autodp1实际上是对空指针的取消引用。因此,该代码表现出未定义的行为。

首先,构造autodp1指向新分配的double。但是,然后autodp2的构造函数自己获取拥有的内存,并将autodp1设置为null。

10-08 11:38