作者:雄鹰访谈录 | 来源:互联网 | 2022-12-10 13:01
如果我有一个未命名的unique_ptr对象,持有一个对象Foo,为什么该对象在被添加到向量时不会被删除?
例:
vec.push_back(std::unique_ptr(new Foo())));
为什么不删除Foo?我试图实现这个,但我似乎无法解决这个问题,因为我删除了析构函数中的对象.
1> Silvio Mayol..:
参数std::vector::push_back
是临时的,因此它将push_back
作为右值引用传递给它.正如您在文档中看到的,push_back
有两种形式,第二种采用右值引用.在unique_ptr
将得到移动到载体,而你的说法将不再拥有内存中创建的临时.
你不能复制std::unique_ptr
; 如果你试过,你会得到一个编译错误.但是,移动一个独特的指针是完全允许的; 前一个所有者不再拥有它曾经指向的内存.