unique_ptr如何在超出范围时不破坏/释放它指向的内存?

Kry*_*n S 2 c++

如果我有一个未命名的unique_ptr对象,持有一个对象Foo,为什么该对象在被添加到向量时不会被删除?

例:

vec.push_back(std::unique_ptr<Foo>(new Foo())));
Run Code Online (Sandbox Code Playgroud)

为什么不删除Foo?我试图实现这个,但我似乎无法解决这个问题,因为我删除了析构函数中的对象.

Sil*_*olo 6

参数std::vector::push_back是临时的,因此它将push_back作为右值引用传递给它.正如您在文档中看到的,push_back有两种形式,第二种采用右值引用.在unique_ptr将得到移动到载体,而你的说法将不再拥有内存中创建的临时.

你不能复制std::unique_ptr; 如果你试过,你会得到一个编译错误.但是,移动一个独特的指针是完全允许的; 前一个所有者不再拥有它曾经指向的内存.