从本地原始指针初始化 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
。而是使用智能指针对象。
我知道用 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
。而是使用智能指针对象。