【发布时间】:2010-05-03 00:56:37
【问题描述】:
我记得以前遇到过这个概念,但现在在 Google 中找不到。
如果我有一个A类型的对象,它直接嵌入了一个B类型的对象:
class A {
B b;
};
我怎样才能有一个指向B 的智能指针,例如。 G。 boost::shared_ptr<B>,但使用 A 的引用计数?假设A 的实例本身是堆分配的,我可以使用enable_shared_from_this 安全地获取其共享计数。
【问题讨论】:
-
@Marcelo Cantos,例如通过 TCP 连接处理消息:要从套接字读取,您需要提供一个连续的缓冲区,但您希望能够对离散消息进行操作(将它们排队,通过他们周围)。因此,您可以制作额外的消息副本(占用两倍的内存,可能导致碎片),或者您可以在每条消息的 shared_ptr 中重新计算缓冲区(如果每条消息都是 POD 并直接映射到缓冲区中的某个位置)。这样,当最后一条消息的 shared_ptr 被破坏时,缓冲区将被删除(或返回池等)。
-
PS 也就是说,如果你不能将 shared_ptr 保存到消息中的缓冲区,因为它需要是 POD 类型。
-
或者,如果您将某个对象嵌入到另一个对象中,并使用期望 shared_ptr 来嵌入对象的 API(可能有多种原因导致您无法将嵌入对象转换为堆分配对象) .
标签: c++ boost smart-pointers shared-ptr