boost::Shared_ptr的析构函数在哪?

TheNewIpad 2013-12-25 05:32:25
阅读shared_ptr的实现代码,找了半天,么看到~shared_ptr(); 这样不BUG了么?

因为都是这样代码。 如果没有析构函数,临时对象怎么会修改计数 和 释放buffer呢。

shared_ptr & operator=( shared_ptr const & r ) BOOST_NOEXCEPT
{
this_type(r).swap(*this);
return *this;
}
...全文
274 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
TheNewIpad 2013-12-26
  • 打赏
  • 举报
回复
引用 3 楼 a345485527 的回复:
没有析构函数不代表没有析构动作 它会逆序撤销每个类成员, 看看函数boost::detail::sp_pointer_construct()和shared_count的析构函数
关键是我看到的他没有积累。 shared_count 也是动态分配的,没有析构,就没人执行析构动作啊。
「已注销」 2013-12-26
  • 打赏
  • 举报
回复
~shared_count() // nothrow { if( pi_ != 0 ) pi_->release();
「已注销」 2013-12-26
  • 打赏
  • 举报
回复
shared_ptr有一个成员boost::detail::shared_count pn; // reference counter 虽然shared_ptr没有显式析构,但是编译器的隐式析构会释放shared_count,引用计数都是有shared_count完成的
Pump天天学习 2013-12-26
  • 打赏
  • 举报
回复
引用 4 楼 TheNewIpad 的回复:
[quote=引用 3 楼 a345485527 的回复:] 没有析构函数不代表没有析构动作 它会逆序撤销每个类成员, 看看函数boost::detail::sp_pointer_construct()和shared_count的析构函数
关键是我看到的他没有积累。 shared_count 也是动态分配的,没有析构,就没人执行析构动作啊。[/quote] 好像是在shared_count中有个release函数
Pump天天学习 2013-12-25
  • 打赏
  • 举报
回复
没有析构函数不代表没有析构动作 它会逆序撤销每个类成员, 看看函数boost::detail::sp_pointer_construct()和shared_count的析构函数
SKATE11 2013-12-25
  • 打赏
  • 举报
回复
看看它有没有基类 弄不好在基类实现的呢
SKATE11 2013-12-25
  • 打赏
  • 举报
回复
头像是奶茶妹吗 好。。。。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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