在阅读之前可以可以先看这篇文章复习一下std::move与std::forward:
理解std::move和std::forward
背景
遇到以下场景,Bar类中有成员变量foo是Foo类的对象,在项目代码中需要申请一个Bar对象,给其中foo中的变量复制,并插入到vector< Bar >中,定义如下:
struct Foo {
std::string name;
std::string id;
Foo() {
std::cout<<"Foo construct"<<std::endl;
printf("%p\n", this);
}
~Foo() {
std::cout<<"Foo deconstruct------"<<std::endl;
printf("%p\n", this);
}
Foo(const Foo& f) {
std::cout<<"Foo copy construct"<<std::endl;
printf("%p\n", this);
}
Foo(Foo&& f) {
name = std::move(f.name);
id = std::move(f.id);
std::cout<<"Foo move construct"<<std::endl;
printf("%p\n", this);
}
Foo& operator= (Foo&& f) {
std::