【发布时间】:2019-01-09 13:16:53
【问题描述】:
我有一个第三方库,里面有很多 c 风格的原始指针。现在我正在用 c++ 17 编写一个线程。我想将弱指针用于库的 c 样式指针。这个库可以被许多其他修改/删除相同指针的线程使用。如何实现?有什么设计模式可以提供帮助吗?
在图书馆:
struct table *table = (struct table *) malloc(sizeof(table));
现在在我的帖子中:
auto wp = std::make_weak<struct table* >(table)
【问题讨论】:
-
为什么是弱指针?为什么不是共享指针?在您的应用程序中,也许您应该为库编写一个包装类(对库的所有访问都应该通过包装类,而不是直接通过)?
-
弱指针无法保存原始指针。这就是弱ptr背后的全部想法。它只指向管理所有权和删除的不同类型的智能指针。
-
也许您应该首先确定谁拥有指针与谁在引用指向的对象但实际上并不拥有指针和被指向的对象。请参阅 When is std::weak_ptr useful? 和 shared_ptr and weak_ptr differences,因为这些问题的答案对指针所有权进行了一些有趣的讨论。
-
考虑使用
std::unique_ptr。仅在没有其他操作时使用std::shared_ptr + std::weak_ptr。