unique_ptr到一个不透明的结构? (C ++)

时间:2015-12-07 09:12:32

标签: c++ c++11 c++14 opaque-pointers

库定义了不透明的数据类型:

struct OpaqueStruct;

并且客户端代码必须获取并释放OpaqueStruct*。我可以访问库源。

不幸的是,shared_ptrunique_ptr都无法存储指针 错误:'sizeof'无法应用于不完整类型

我能想到的最好的事情是借用最后的守卫 from this post

如何将RAII用于不透明的struct指针?

2 个答案:

答案 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)