如何将 boost::shared_ptr (或另一个智能指针)附加到对象父对象的引用计数器?
我记得以前遇到过这个概念,但现在在谷歌中找不到它。
如果我有一个 A 类型的对象,它直接嵌入一个 B 类型的对象:
class A {
B b;
};
我怎样才能有一个指向 B
的智能指针,例如 boost::shared_ptr
,但是使用 A
的引用计数?假设 A
的实例本身是堆分配的,我可以使用 enable_shared_from_this
安全地获取其共享计数。
I remember encountering this concept before, but can't find it in Google now.
If I have an object of type A, which directly embeds an object of type B:
class A {
B b;
};
How can I have a smart pointer to B
, e. g. boost::shared_ptr<B>
, but use reference count of A
? Assume an instance of A
itself is heap-allocated I can safely get its shared count using, say, enable_shared_from_this
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
噢!
在
shared_ptr
文档中找到了它。这称为别名(参见 shared_ptr 的第 III 节C++0x 的改进)。我只需要使用不同的构造函数(或相应的
reset
函数重载):其工作原理如下(您需要首先构造共享指针到父级):
D'oh!
Found it right in
shared_ptr
documentation. It's called aliasing (see section III of shared_ptr improvements for C++0x).I just needed to use a different constructor (or a corresponding
reset
function overload):Which works like this (you need to construct shared_ptr to parent first):
我还没有对此进行测试,但您应该能够使用
I have not tested this, but you should be able to use a custom deallocator object to keep a shared_ptr to the parent around as long as the child is still needed. Something along these lines: