是否可以为c样式指针或c ++ 17中的原始指针创建弱指针

时间:2019-01-09 13:16:53

标签: c++ c++17

我有一个第三方库,其中包含很多c风格的原始指针。现在我正在用c ++ 17编写线程。我想对库的c样式指针使用弱指针。许多其他修改/删除相同指针的线程都可以使用此库。如何实现?有没有可以帮助您的设计模式?

在库中:

struct table *table = (struct table *) malloc(sizeof(table));

现在在我的线程中:

auto wp = std::make_weak<struct table* >(table)

1 个答案:

答案 0 :(得分:0)

由于原始指针而导致的致命问题之一是,您可以执行什么来观察其他地方使您的无效指针。智能指针的工作方式是跟踪谁知道对象,并且仅在销毁最后一个指针时销毁。

std::weak_ptrstd::shared_ptr的补充,仅此而已。它无法神奇地知道何时在指向的对象上调用delete,它使用与std::shared_ptr相同的机制来了解对象的生存期。请注意,std::weak_ptr的构造函数没有接受原始指针。

如果库正在管理所有权,则将它们放入使用std::default_delete的智能指针中是不正确。最好的办法是将库的release函数用作智能指针的删除器,并包装create函数,以便您返回这样的智能指针,而不是原始指针。