我有一个第三方库,其中包含很多c风格的原始指针。现在我正在用c ++ 17编写线程。我想对库的c样式指针使用弱指针。许多其他修改/删除相同指针的线程都可以使用此库。如何实现?有没有可以帮助您的设计模式?
在库中:
struct table *table = (struct table *) malloc(sizeof(table));
现在在我的线程中:
auto wp = std::make_weak<struct table* >(table)
答案 0 :(得分:0)
由于原始指针而导致的致命问题之一是,您可以执行什么来观察其他地方使您的无效指针。智能指针的工作方式是跟踪谁知道对象,并且仅在销毁最后一个指针时销毁。
std::weak_ptr
是std::shared_ptr
的补充,仅此而已。它无法神奇地知道何时在指向的对象上调用delete
,它使用与std::shared_ptr
相同的机制来了解对象的生存期。请注意,std::weak_ptr
的构造函数没有接受原始指针。
如果库正在管理所有权,则将它们放入使用std::default_delete
的智能指针中是不正确。最好的办法是将库的release
函数用作智能指针的删除器,并包装create
函数,以便您返回这样的智能指针,而不是原始指针。