【发布时间】:2013-06-15 17:36:47
【问题描述】:
我有一个要移植到 C++ 的 C 库,它大量使用手动引用计数的结构。我考虑过使用shared_ptr 来自动处理引用计数,但我也想维护C API。旧签名看起来像这样:
Object* object_create(void);
Object* object_retain(Object* o);
void object_release(Object* o);
如果我使用shared_ptr,有什么方法可以有效地在 C API 中公开此手动引用计数?
【问题讨论】:
-
澄清一下;你想要一个 shared_ptr 包装从
object_create获得的原始指针,并让它在相关时间调用object_release? -
你最好使用Boost.intrusive_ptr。
-
嗯,好的。好吧,您可以从 shared_ptr 获取原始指针没问题,(请参阅stackoverflow.com/questions/505143/…),但正如您所料,没有跟踪原始指针的去向(此时它完全在引用计数机制之外)。
-
在 c 中实现为结构,在 c++ 中实现类?这样就少了很大的痛苦。
-
std::enable_shared_from_this 可能对您有用,但不幸的是,您需要至少有一个来自 C++ 代码的 shared_ptr 引用:请参阅stackoverflow.com/questions/4428023/…
标签: c++ c shared-ptr