一个库定义了一个不透明的数据类型:
struct OpaqueStruct;
并且客户端代码必须获取并发布一个OpaqueStruct*
. 我可以访问库源。
不幸的是,既shared_ptr
不能unique_ptr
也不能存储该指针给出
错误:'sizeof' 对不完整类型的无效应用。
我能想到的最好的事情就是借用这个职位的finally 守卫 。
如何将 RAII 用于不透明的结构指针?
一个库定义了一个不透明的数据类型:
struct OpaqueStruct;
并且客户端代码必须获取并发布一个OpaqueStruct*
. 我可以访问库源。
不幸的是,既shared_ptr
不能unique_ptr
也不能存储该指针给出
错误:'sizeof' 对不完整类型的无效应用。
我能想到的最好的事情就是借用这个职位的finally 守卫 。
如何将 RAII 用于不透明的结构指针?
您只能构造和删除完整类型,另请参见此处:删除指向不完整类型“Point”的指针;没有调用析构函数。所以至少进行构造/销毁的代码片段需要知道完整的类型。
您可以使用不完整的类型声明 unique_ptr 或 shared_ptr。对于这些智能指针的哪些成员可以在只知道不完整类型的上下文中使用,请参阅是否需要 std::unique_ptr<T> 才能知道 T 的完整定义?.
std::unique_ptr<OpaqueStruct, void(*)(OpaqueStruct*)>
ops(newOpaqueStruct(), deleteOpaqueStruct)