是否可以在 c++17 中为 c 样式指针或原始指针创建弱指针
Is it possible to create weak pointer for c style pointer or raw pointer in c++17
我有一个第三方库,里面有很多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
函数,以便返回这样的智能指针而不是原始指针。
相关文章:
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- 从堆栈分配的原始指针构造智能指针
- 将unique_ptr分配给原始指针
- 如何将唯一指针的 std::vector 转换为原始指针的 std::span?
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- C++原始指针和"delete"
- 为什么 C++ 地址中的矢量无法通过原始指针访问
- 复制后删除原始数组指针将前 3 个字节设置为 0
- 如何正确实现具有原始指针的类的复制构造函数?
- 如何在将原始指针移动到基类构造函数之前从unique_ptr中提取原始指针
- C++指针无法更改其原始值
- 为包含原始指针的对象C++智能指针
- unique_ptr<T>::get() 返回的指针在原始unique_ptr被销毁后不是 nullptr
- c++:复制、删除和运算符=在原始指针映射中
- C++模板,用于通过常量引用和原始指针传递向量
- C++为什么原始指针不会增加shared_ptr的引用计数?
- 从shared_ptr获取原始指针以将其传递给需要 raw 的函数
- 如何包装多级原始指针以赋予其容器语义
- 为什么我可以通过原始指针而不是shared_ptr来修改对象
- Qt - 将空指针(原始数据)转换为 QImage 并将其显示在标签上