我一直在考虑使用unique_ptr
vs shared_ptr
vs own_solution
。我对后者不以为然,因为我几乎肯定会弄错,但我对两者都有问题unique_ptr
and shared_ptr
因为两者都没有准确地捕捉到我想要的东西。我想创建一个明确拥有资源的资源管理器,但是我希望资源管理器也分发对该资源的引用。
如果我使用unique_ptr
在资源管理器中并分发原始指针,它们有可能逃逸到其他地方(尽管这违反了我认为的类“合同”)。如果我使用shared_ptr
并分发weak_ptr
,没有什么可以阻止调用者转换weak_ptr
to a shared_ptr
并存储它,从而可能创建一个循环,或更糟糕的是,资源的生命周期超出了资源管理器的生命周期。所以我想我正在寻找的是一个可尊敬的weak_ptr
无法转换为shared_ptr
.
或者我只是想通过代码中一些措辞强硬的注释来执行合同?
感谢您对此可能有的任何想法。
最后,你不能强迫任何人听。询问微软、苹果或任何开源库开发人员,他们都知道这首歌。在正确的词语和位置发表评论是您最好的选择。
避免创建自己的智能指针类,它会阻碍组合并降低可读性。作为最后的手段,尝试查看 boost 或您的代码已经可以使用的任何框架。
如果您有非所有者,他们可以选择持有weak_ptr
s 或(如果保证在持续时间内保持有效)原始指针。
如果你使用shared_ptr
内部(为什么要),最好提供weak_ptr
和原始指针。
所有这些智能指针都明确表示所有权策略。原始指针表示无或不拥有。
-
auto_ptr
:不要使用,即使对于谨慎的人来说,也有太多陷阱,因此已被弃用。
-
unique_ptr
: 独家所有权。
-
shared_ptr
: 共享所有权
-
weak_ptr
:没有所有权,可能会被背后删除。
- raw pointer
- 明确无所有权,保证更长的使用寿命
- 或手动所有权管理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)