У меня есть объект, операция копирования которого была бы слишком медленной, поэтому я решил сделать это 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");
Это снова требует конструктор копирования. Я не мог заставить его работать даже явно используя ход:
Object x = std::move(loadFromFile("test.txt"));
Единственным решением, которое я пришел было:
const Object& x = loadFromFile("test.txt");
Но x
должен быть неконстантным, как он собирается быть изменен позже ,
Как с этим бороться?
«Копия этого объекта не имеет никакого смысла в любом случае». судя по тому, как вы его используете, это выглядит неправдой. –
Wait - не будет ли первый пример обрабатывать 'obj' как rvalue, и поэтому конструктор копирования не требуется * not *? [См. Здесь] (http://ideone.com/g4rAnN). Похоже, ваш вопрос основан на проблеме, которая не существует. –
Правильно работает здесь: https://ideone.com/Ex81gj – Jarod42