【发布时间】:2019-11-17 10:29:55
【问题描述】:
unique_ptr 不能被推回std::vector,因为它是不可复制的,除非使用std::move。但是,如果让F 是一个返回unique_ptr 的函数,那么std::vector::push_back(F()) 操作是允许的。下面有一个例子:
#include <iostream>
#include <vector>
#include <memory>
class A {
public:
int f() { return _f + 10; }
private:
int _f = 20;
};
std::unique_ptr<A> create() { return std::unique_ptr<A>(new A); }
int main() {
std::unique_ptr<A> p1(new A());
std::vector< std::unique_ptr<A> > v;
v.push_back(p1); // (1) This fails, should use std::move
v.push_back(create()); // (2) This doesn't fail, should use std::move?
return 0;
}
(2) 是允许的,但(1) 是不允许的。这是因为返回的值以某种方式隐式移动了吗?
(2)中,真的有必要使用std::move吗?
【问题讨论】:
标签: c++ smart-pointers stdvector move-semantics