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_ptr或std::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)
那么,这个新结构的用途是什么?
它只是用于自我记录的来源吗?