相关疑难解决方法(0)

使用observer_ptr

std::observer_ptr库基础技术规范V2 中的构造究竟有什么意义?

在我看来,它所做的一切都是裸露的T*,如果不增加动态内存安全性,这似乎是一个多余的步骤.

在我的所有代码中,我使用std::unique_ptr了我需要明确拥有对象的位置以及std::shared_ptr可以共享对象所有权的位置.

这非常有效并且可以防止意外解除引用已经被破坏的对象.

std::observer_ptr 当然,不保证观察到的物体的寿命.

如果它是从a构造的,std::unique_ptr或者std::shared_ptr我会看到在这样的结构中使用,但任何简单使用的代码T*可能只是继续这样做,如果他们计划移动到任何它将是std::shared_ptr和/或std::unique_ptr(取决于在使用上).


给出一个简单的示例函数:

template<typename T>
auto func(std::observer_ptr<T> ptr){}
Run Code Online (Sandbox Code Playgroud)

如果停止智能指针在观察它们时销毁它们存储的对象将会有用.

但如果我想观察std::shared_ptrstd::unique_ptr我必须写:

auto main() -> int{
    auto uptr = std::make_unique<int>(5);
    auto sptr = std::make_shared<int>(6);
    func(uptr.get());
    func(sptr.get());
}
Run Code Online (Sandbox Code Playgroud)

这使得它不比以下更安全:

template<typename T>
auto func(T *ptr){}
Run Code Online (Sandbox Code Playgroud)

那么,这个新结构的用途是什么?

它只是用于自我记录的来源吗?

c++ smart-pointers c++17

42
推荐指数
5
解决办法
6748
查看次数

标签 统计

c++ ×1

c++17 ×1

smart-pointers ×1