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

Is it possible to create weak pointer for c style pointer or raw pointer in c++17

本文关键字:指针 原始 创建 样式 c++17 中为 是否      更新时间:2023-10-16

我有一个第三方库,里面有很多c风格的原始指针。现在我正在用 c++ 17 编写一个线程。我想对库的 C 样式指针使用弱指针。该库可以由许多其他修改/删除相同指针的线程使用。如何实现?有什么设计模式可以提供帮助吗?

在图书馆 :

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

现在在我的线程中:

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

欠原始指针的致命问题之一是,您无法采取任何措施来观察其他地方已使您的指针无效。智能指针的工作原理是跟踪谁知道该对象,并且仅在最后一个指针被销毁时才销毁。

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

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