如果我将unique_ptr
指向STL容器的实例,如下所示怎么办?这段代码安全吗?
unique_ptr< vector<int> > p1( new vector<int> );
这不会导致vector<int>
被调用两次的析构函数,因为vector<int>
本身和unique_ptr
都试图清理内存{{1}到目前为止已经获得了?这会导致未定义的行为吗?或者编译器是否知道vector<int>
已释放其内存并且为了vector<int>
超出范围而不再调用析构函数?
这只是要明白,如果某人愚蠢到可以做到这一点,那会不会很危险?
答案 0 :(得分:6)
unique_ptr< vector<int> > p1( new vector<int> );
unique_ptr
delete
vector
号召唤vector
。
然后vector<int>
的析构函数将释放自己分配的内存。
所以这很安全。
但是unique_ptr< vector<int> >
就足够了。我没有看到你想要{{1}}的情况。