从本地原始指针初始化 std::unique_ptr 是否安全?

Is it safe to init a std::unique_ptr from a local raw pointer?

我知道用 std::shared_ptr 这样做是不明智的。但是 std::unique_ptr 呢?例如。 :

class A {
 public:
  void do_something() { }
};

std::vector<std::unique_ptr<A> > uq_ptrs_;
auto p = new A();
uq_ptrs_.push_back(std::unique_ptr<A>(p));
p->do_something();

只要您在创建 std::unique_ptr(或 std::shared_ptr!)对象后不手动 delete 对象就可以了。

一旦您要求 std::unique_ptr(或 std::shared_ptr)获得指针的所有权,您还应该避免取消引用指针 p。而是使用智能指针对象。