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

struct OpaqueStruct;

客户代码必须获取并释放OpaqueStruct*。我可以访问图书馆资料。

不幸的是,shared_ptrunique_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?

10-08 03:54