【发布时间】:2016-03-11 20:14:00
【问题描述】:
一个库定义了一个不透明的数据类型:
struct OpaqueStruct;
并且客户端代码必须获得并释放OpaqueStruct*。我可以访问库源。
不幸的是,shared_ptr 和 unique_ptr 都无法存储该指针
错误:“sizeof”对不完整类型的无效应用。
我能想到的最好的办法就是借用 finally 守卫from this post。
如何将 RAII 用于不透明的结构指针?
【问题讨论】:
-
@TC:遗憾的是,重复问题的答案没有解释如何使用带有
std::unique_ptr<T>的自定义删除器在未定义T的上下文中创建这些实体(答案不过,StoryTeller 指出的问题确实如此)。 -
我已回滚您的编辑,因为在问题中包含答案是不合适的。如果您认为应该重新打开此问题以便您可以发布自己的答案,您应该编辑您的问题以解释为什么重复无法解决它。
-
@IKavanagh 那么,您能重定向重复标记吗?目前它被标记为不包含答案的问题的重复。
-
被审查的答案:
std::unique_ptr<OpaqueStruct, void(*)(OpaqueStruct*)> ops(newOpaqueStruct(), deleteOpaqueStruct);
标签: c++ c++11 c++14 opaque-pointers