C ++中的自动指针(auto_ptr)

时间:2014-05-05 20:59:43

标签: c++ pointers auto-ptr

我试图找出这段代码打印的内容,但由于某种原因无法输出,它给了我一个错误:“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;

我只是想知道它会打印什么,如果它甚至打印。

注意:这个问题出现在过去的试卷中,只是为了修改。

2 个答案:

答案 0 :(得分:5)

代码*autodp1实际上是空指针的解引用。因此代码表现出不确定的行为。

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

答案 1 :(得分:1)

这是因为运营商对auto_ptr的分配取得了所有权(移动)指针

在Wiki上阅读,这是一个非常好的一般性解释:

http://en.wikipedia.org/wiki/Smart_pointer

“std :: auto_ptr的复制构造函数和赋值运算符实际上并不复制存储的指针。而是将它们传输,将前一个std :: auto_ptr对象留空。这是实现严格所有权的一种方法,这样只有一个auto_ptr对象可以在任何给定时间拥有指针。这意味着不应该在需要复制语义的地方使用auto_ptr。“