一个库定义了一个不透明的数据类型:
struct OpaqueStruct;
客户代码必须获取并释放
OpaqueStruct*
。我可以访问图书馆资料。不幸的是,
shared_ptr
和unique_ptr
都无法存储该指针,错误:将“sizeof”无效地应用于不完整的类型。
我能想到的最好的事情是借用最后的后卫from this post。
如何将RAII用于不透明的结构指针?
最佳答案
您只能构造和删除完整类型,另请参见: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?。