返回信息流我看见书上说:auto_ptr有个不同寻常的特性:若通过copy构造函数或者copy assignment操作符复制他们,他们就会变成NULL,而复制所得的指针将取得资源的的唯一拥有权(effective c++ pg 63)
但是我实际测试的时候,发现并不是null,而是继续指向资源,不知道这是为什么,期待大牛解答。。。
#include <iostream>
class Investment{
public:
void print()
{
std::cout<<"Hello World"<<std::endl;
}
private :
std::string userName;
};
Investment * CreateInvestment()
{
return new Investment;
}
int main()
{
std::auto_ptr<Investment> autoP1(CreateInvestment());
autoP1->print();
std::auto_ptr<Investment> autoP2(autoP1);
autoP1->print(); //此处继续指向资源??
std::auto_ptr<Investment> autoP3;
autoP3 = autoP2;
autoP2->print();//此处继续指向资源?为何不是null那?
return 0;
}
输出结果
Hello world
Hello world
Hello world
测试环境:eclipse+cdt /g++
这是一条镜像帖。来源:北邮人论坛 / cpp / #37296同步于 2010/3/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于 std::auto_ptr的复制问题
snowbird
2010/3/31镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
实际上已经发生资源转移了,也就是autoP1为空了,打印出hello world的原因在于print成员函数没有访问到对象的内部数据成员,只是简单的打印了一个hello world,所以即使是一个空的autoP1,也可以正确调用print函数,你可以在print里面访问userName,程序就会挂掉了。
【 在 snowbird 的大作中提到: 】
: 我看见书上说:auto_ptr有个不同寻常的特性:若通过copy构造函数或者copy assignment操作符复制他们,他们就会变成NULL,而复制所得的指针将取得资源的的唯一拥有权(effective c++ pg 63)
: 但是我实际测试的时候,发现并不是null,而是继续指向资源,不知道这是为什么,期待大牛解答。。。
: #include <iostream>
: ...................