我有一个对象,它的复制操作太慢了,所以我决定这样delete
做并强制用户只移动。无论如何,这个对象伤口的副本没有多大意义。但后来我有这个功能:
Object loadFromFile(const std::string& name) {
Object obj;
...
return obj;
}
即使这里发生了复制省略并且没有调用复制构造函数,这也无法编译,因为需要复制构造函数存在并且可以访问。这是我的第二次尝试:
Object&& loadFromFile(const std::string& name) {
Object obj;
...
return std::move(obj);
}
这编译。耶!
但是在尝试使用它时又出现了一个新问题:
Object x = loadFromFile("test.txt");
这又需要一个复制构造函数。即使明确使用move,我也无法让它工作:
Object x = std::move(loadFromFile("test.txt"));
我来的唯一解决方案是:
const Object& x = loadFromFile("test.txt");
但x
必须是非常量的,因为它稍后会被改变。
如何处理?