【发布时间】:2019-01-30 20:32:25
【问题描述】:
对unique_ptr<T> 的多次分配是否有效?根据输出,它是,但是T 的析构函数是否保证在使用make_unique() 并且返回值分配给已经拥有现有内存的unique_ptr 时被调用?
#include <iostream>
#include <string>
#include <memory>
class A{
public:
A(){ std::cout << "Construcor" << std::endl; }
~A(){ std::cout << "Destrucor" << std::endl; }
void foo(){ std::cout << "foo" << std::endl; }
};
int main()
{
std::unique_ptr<A> pointer;
for(auto i = 0; i < 2; ++i){
pointer = std::make_unique<A>();
pointer->foo();
}
}
输出:
Construcor
foo
Construcor
Destrucor // Destructor is called because first instance of A is out of scope?
foo
Destrucor
【问题讨论】:
-
将
unique_ptr的实例分配给另一个实例将替换前一个实例,这需要正确销毁先前保存的值(如果存在)。其他任何东西都会泄漏。
标签: c++ c++11 unique-ptr