库定义了不透明的数据类型:
struct OpaqueStruct;
并且客户端代码必须获取并释放OpaqueStruct*
。我可以访问库源。
不幸的是,shared_ptr
和unique_ptr
都无法存储指针
错误:'sizeof'无法应用于不完整类型。
我能想到的最好的事情是借用最后的守卫 from this post。
如何将RAII用于不透明的struct指针?
答案 0 :(得分:3)
您只能构建和删除完整类型,另请参见此处:Deletion of pointer to incomplete type 'Point'; no destructor called。所以至少执行构造/销毁的代码片段需要知道完整的类型。
您可以使用不完整类型声明unique_ptr或shared_ptr。您可以在仅知道不完整类型的上下文中使用这些智能指针的成员,请参阅Is std::unique_ptr<T> required to know the full definition of T?。
答案 1 :(得分:3)
std::unique_ptr<OpaqueStruct, void(*)(OpaqueStruct*)>
ops(newOpaqueStruct(), deleteOpaqueStruct)