举一个场景:
有一个结构,我们要parse一些json数据,用parse出来的数据填充这个结构的各个字段,
然后把这个结构插入到表里(map/set/vector里)
struct MyStruct {
m1;
m2;
m3;
};
for(...) {
MyStruct temp;
temp.m1 = ParseJson1();
temp.m2 = ParseJson2();
temp.m3 = ParseJson3();
myTable.emplace_back(std::move(temp));
}
临时变量temp每次循环完都是废弃的,temp里的资源直接move走完事。
当然,也可以用裸指针
for(...) {
auto temp = new MyStruct;
temp->m1 = ParseJson1();
temp->m2 = ParseJson2();
temp->m3 = ParseJson3();
myTable.emplace_back(temp);
}
不过,最后还不能忘了myTable中的每个指针要释放掉。
for(auto &p : myTable) {
delete p;
}
还可以用std::unique_ptr,不过最后也是要执行move:
for(...) {
auto temp = std::make_unique<MyStruct>();
temp->m1 = ParseJson1();
temp->m2 = ParseJson2();
temp->m3 = ParseJson3();
myTable.emplace_back(std::move(temp));
}
我倾向于第一种写法。
【 在 toutouqi 的大作中提到: 】
: 可不可以这样理解,move就是不保证输入参数数据完整性的拷贝,目的是为了某些情况下减少内存拷贝?
: 用move的场景,如果改用指针,对象指针直接赋值,再把原指针赋0,连普通成员变量的拷贝都省了,看起来似乎比用move概念更清楚。不知道啥场景必须设计成用move而不用指针?
--
FROM 125.35.123.*