Sha*_*ane 1 c++ structure weak-ptr scoped-ptr
一般来说,我都遵循Google风格指南,我觉得这与我看待事物的方式很吻合.我也几乎完全使用boost :: scoped_ptr,这样只有一个经理拥有特定对象的所有权.然后我传递了裸指针,这个想法是我的项目的结构使得所有对象的管理器在使用它们的对象被销毁后总是被销毁.
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Smart_Pointers
这一切都很棒,但是我只是被一个令人讨厌的小内存stomp bug所困扰,其中所有者恰好在删除使用它的对象之前被删除了.
现在,在每个人都跳起来之前说我对这个模式很傻,为什么我不只是使用shared_ptr?等等,考虑一下我不希望拥有未定义的所有者语义.尽管shared_ptr会捕获这种特殊情况,但它会向系统用户发送错误消息.它说,"我不知道谁拥有这个,它可能是你!"
什么会帮助我本来是一个指向范围指针的弱指针.实际上,一个带有弱引用列表的作用域指针,当作用域指针析构时它们被清空.这将允许单一所有权语义,但给使用对象一个机会来捕捉我遇到的问题.
因此,以scoped_ptr的额外'weak_refs'指针和weak_ptr中'next_weak_ptr'的额外指针为代价,它将成为一个整洁的小单一所有者,多个用户结构.
它甚至可能只是一个调试功能,所以在'release'中,整个系统只会转回一个正常大小的scoped_ptr和一个用于弱引用的标准单指针.
所以这......我的问题是:
干杯,沙恩
2.还有更好的方法,仍然符合我的单一所有权目标吗?
使用a shared_ptr,但作为类成员使它成为该类的不变量的一部分,而公共接口只暴露了获取a的方法weak_ptr.
当然,病态的代码可以保留自己shared_ptr从weak_ptr,只要他们想要的.我不建议在这里试图保护马基雅维利,只针对墨菲(使用萨特的话).另一方面,如果您的用例是异步的,那么锁定a weak_ptr返回a 的事实shared_ptr可能是一个功能!
| 归档时间: |
|
| 查看次数: |
986 次 |
| 最近记录: |