C++11 从本地原始指针初始化std::unique_ptr安全吗?
我知道用C++11 从本地原始指针初始化std::unique_ptr安全吗?,c++11,smart-pointers,unique-ptr,C++11,Smart Pointers,Unique Ptr,我知道用std::shared\u ptr这样做是不明智的。但是关于std::unique\u 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::shared\u ptr
这样做是不明智的。但是关于std::unique\u 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();
A类{
公众:
void do_某物(){};
};
std::向量uq_ptrs;
自动p=新A();
uq_ptrs_u.push_back(标准::唯一的_ptr(p));
p->dou_某事();
只要在创建std::unique_ptr
(或std::shared_ptr
!)对象后不手动删除
对象,就可以了
当您要求
std::unique_ptr
(或std::shared_ptr
)拥有指针所有权时,还应避免取消对指针的引用。使用智能指针对象。只要在创建std::unique_ptr
(或std::shared_ptr
)对象后不手动删除对象,就可以了
当您要求std::unique_ptr
(或std::shared_ptr
)拥有指针所有权时,还应避免取消对指针的引用。而是使用智能指针对象。我在示例中添加了更多行。根据您新添加的注释,p->do_something()
不应该存在?@duong\u dajgja只要std::unique\u ptr
对象仍然存在,那么您就可以像使用原始指针一样使用它。不过,我强烈建议不要这样做。我还强烈建议您不要像对待原始的非所有权指针那样,稍后将所有权移动到std::unique\u ptr
。而是从一个std::unique\u ptr
开始。您所做的是说p
指向的对象属于新的std::unique\u ptr
对象。我在示例中添加了更多行。根据您新添加的注释,p->do_something()
不应该存在?@duong\u dajgja只要std::unique\u ptr
对象仍然存在,那么您就可以像使用原始指针一样使用它。不过,我强烈建议不要这样做。我还强烈建议您不要像对待原始的非所有权指针那样,稍后将所有权移动到std::unique\u ptr
。而是从一个std::unique\u ptr
开始。您所做的是说由p
指向的对象属于新的std::unique\u ptr
对象。的可能副本的可能副本