auto_ptr为什么能在退出作用塔的时候

Jenf_Mu 2012-10-11 05:21:53
int main(int argc, char *argv[])
{
vector<auto_ptr<AAA> > vt;
for (int i=0;i<10;i++)
{
vt.push_back(auto_ptr<AAA>(new AAA(i)));
}
vt[0]->Print();
return 0;
}
...全文
44 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oN5GrzoN 2012-10-11
  • 打赏
  • 举报
回复
跟踪源码 复制给vector的时候,它里边包含的指针变成了0,而把有东西的指针给了vector里面那个元素。所以它析构的时候delete的是0
Jenf_Mu 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

由于所有权(ownership)转移的问题,auto_ptr不能作为容器的元素. 换用其它的smart pointer吧, 比如boost::shared_ptr
[/Quote]
我现在只想知道为什么超出作用域没有析构,不用考虑所有权的问题,而且shared_ptr 8字节,我用auto_ptr 4字节就行了。
mujiok2003 2012-10-11
  • 打赏
  • 举报
回复
由于所有权(ownership)转移的问题,auto_ptr不能作为容器的元素. 换用其它的smart pointer吧, 比如boost::shared_ptr
mujiok2003 2012-10-11
  • 打赏
  • 举报
回复
由于所有权(ownership)转移的问题,auto_ptr不能作为容器的元素. 换用其它的smart pointer吧, 比如boost::shared_ptr
Jenf_Mu 2012-10-11
  • 打赏
  • 举报
回复
也没有引用计数之类的东西
Jenf_Mu 2012-10-11
  • 打赏
  • 举报
回复
不小心按了回车,就发了问题,问题应该是

auto_ptr为什么能在退出作用域的时候,不调用析构函数,delete掉包含的指针

源码如下
	~auto_ptr()
{ // destroy the object
delete _Myptr;
}


vt.push_back(auto_ptr<AAA>(new AAA(i)))
这里生成一个临时的auto_ptr<AAA>,应该过了这句话就析构了啊,为什么在程序的最后才析构的。

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧