如果我使unique_ptr
点到一个STL容器的实例如下?这个代码安全吗?
unique_ptr< vector<int> > p1( new vector<int> );
这不会导致vector<int>
的析构函数被调用两次,因为vector<int>
本身和unique_ptr
都试图清理vector<int>
到目前为止已经获得的内存吗?这会导致未定义的行为吗?或者编译器不知何故知道vector<int>
已经释放了它的内存,并且为了unique_ptr
超出作用域而不再调用析构函数?这只是为了理解,如果有人愚蠢到这样做,这可能是危险的吗?
unique_ptr< vector<int> > p1( new vector<int> );
和unique_ptr
在vector
上调用delete
。然后,vector
的析构函数释放它自己分配的内存。所以是安全的。
但是vector<int>
就足够了。我不认为你需要unique_ptr< vector<int> >
。