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

unique_ptr to an opaque struct? (C++)

本文关键字:C++ 结构 不透明 ptr unique      更新时间:2023-10-16

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

struct OpaqueStruct;

并且客户端代码必须获得并释放CCD_ 1。我可以访问图书馆的资料来源。

不幸的是,shared_ptrunique_ptr都不能存储给出错误:对不完整的类型应用"sizeof"无效。

我能想到的最好的事情是从这个帖子中借用finally guard

如何将RAII用于不透明结构指针

您只能构造和删除完整类型,另请参阅此处:删除指向不完整类型的指针';要点';;没有调用析构函数。因此,至少进行构建/销毁的代码片段需要知道完整的类型。

您可以使用不完整的类型声明unique_ptr或shared_ptr。对于这些智能指针的哪些成员,您可以在只知道不完整类型的上下文中使用,请参阅is std::unique_ptr<T>需要知道T?的完整定义?。

std::unique_ptr<OpaqueStruct, void(*)(OpaqueStruct*)>
               ops(newOpaqueStruct(), deleteOpaqueStruct)