这是intrusive_ptr的有效用法吗?
|
在我的代码中,涉及intrusive_ptrs时,我遵循两个规则:
通过值传递原始指针意味着该原始指针在该函数的生存期内被保证是有效的。
如果要在函数的生存期之外存储和使用原始指针,则应将其存储在intrusive_ptr中。
许多Internet评论员已经写道,与第三方代码相比,shared_ptr应该比intrusive_ptr更可取。但是,intrusive_ptr避免了智能指针的传递,因为您可以从原始指针创建intrusive_ptr,就像在函数寿命之外需要对象时。
我只是担心自己会丢失一些东西,因为我读过的东西都没有涉及到intrusive_ptrs,而且大多数人似乎更喜欢shared_ptrs,即使它们在使用enable_shared_from_this和继承时会带来内存开销以及问题。
没有找到相关结果
已邀请:
2 个回复
闪脖
的所有权语义尚不清楚。如果您是
的客户,则需要阅读文档以了解
是否要取消分配
,或忽略
的所有权问题。
的所有权语义很清楚。当您呼叫
时,会将
的所有权传递给
,并且您不再对此承担责任。 “ 6”将取消分配“ 4”或将该资源的所有权转移到其他地方。
的所有权语义很清楚。当您致电
时,您和
成为
的共同所有人。最后一个熄灭灯。
具有与
相同的所有权语义。主要区别在于必须存在以下自由函数:
如果您是
的作者,并且在
上调用了这些函数,则应记录为例。您的客户不一定知道您是。而且,如果您是ѭ1a的客户,除非您阅读read1ѭ的文档,否则您将无法知道ing1ѭ是否会调用这些函数。 如果您是
的作者,并且打算调用
函数,则可以通过编码
在界面中使它显式。 但是通常并没有令人信服的理由强加给
的作者编写write25ѭ函数。您可以通过编写ѭ12you来获得与
相同的所有权语义,而无需对
施加任何其他要求。 内存开销 如果您使用以下方法创建
:
那么您的
将具有与
完全相同的内存开销。该实现将在同一内存分配中分配A和refcount。您的客户不需要知道或关心您的
如此高效地构造。
冕偷淮款