有关auto_ptr的一些问题,,请大家看看
问题一:
书中写道auto_ptr支持所有权概念
那么如:
auto_ptr<int> p(new int(1024));
auto_ptr<int> p1(p);//这里对象的所有权应该是转给p1了吧,,那p指针就应该不再指向对象了吧
cout<<*p1<<endl;
cout<<*p<<endl;//那么为何这里还可以显示出1024呢?
问题二:
auto_ptr<int> p(new int(1024));
p.reset(new int(2048));//为何显示错误
//error C2039: 'reset' : is not a member of auto_ptr<int>
问题点数:20、回复次数:7Top
1 楼R9R9R9(猪头饼)回复于 2005-06-01 22:35:47 得分 0
另外:
假设auto_ptr<string> ps(new string("Daniel"));
则下列两个语句的区别是什么?应该是一样的吧?为什么auto_ptr对像既可以用.又可以用->操作符哟?
ps.get()->assign("Danny");
ps->assign("Danny");
Top
2 楼qhfu(改个名字)回复于 2005-06-01 22:41:31 得分 20
一题,只是释放权从第一个变量转到第二个变量而且, 第一个变量还是指向声明的堆空间的,只是它不再负责释放元素了。Top
3 楼qhfu(改个名字)回复于 2005-06-01 22:44:49 得分 0
ps.get()->assign("Danny");
ps->assign("Danny");
这两个中 第一个效率比第二个高Top
4 楼foochow(无聊,灌水......)回复于 2005-06-01 23:28:02 得分 0
auto_ptr<int> p1(p);这个可能导致p失效,也就是说,在auto_ptr对象放弃所有权之后,将可能不再可用,它是否可用取决于实现
Top
5 楼mostideal(三甲)回复于 2005-06-02 00:05:23 得分 0
学习。。Top
6 楼zdy_8212(zdy_8212)回复于 2005-06-02 01:41:34 得分 0
p在完成它的操作后这块地址就是它的。在第二句出现后它转接了P。
非成员函数(写错了?)。函数的返回值类型的不同Top
7 楼R9R9R9(猪头饼)回复于 2005-06-02 12:50:30 得分 0
期待更详细的答案Top




