Я хочу использовать удобные функции при создании экземпляров класса в моей функции main(), чтобы сделать вещи более понятными.Справочные и установочные функции rvalue
Вот минимальный пример:
class MyClass
{
public:
MyClass() : value{ -1 }, str{ "hello" } {}
MyClass(const MyClass &&other)
{
value = move(other.value);
str = move(other.str);
file = move(other.file); //Use of deleted function...
}
void open()
{
file.open("myfile");
}
private:
MyClass(const MyClass &) = delete;
MyClass operator=(const MyClass &) = delete;
MyClass &operator=(const MyClass &&) = delete;
ofstream file;
int value;
string str;
};
inline MyClass setup_myclass()
{
MyClass ret;
ret.open();
return ret;
}
int main(int argc, char **argv)
{
MyClass &&mc = setup_myclass();
return 0;
}
Проблема заключается в том, когда мой класс содержит такие вещи, как fstream или нить, которая имеет свой ход конструкторов удалены.
Я компилирую с g ++ 5.1.1 и arm-linux-g ++ 5.2.0 (raspberrypi, buildroot).
Что должен выглядеть мой конструктор перемещения, когда у меня есть члены с удаленными конструкторами перемещения?
Как я могу изменить свой код на ту же самую чистую основную функцию?
'std :: ofstream' имеет конструктор перемещения. [это конструктор копирования, который удален) (http://en.cppreference.com/w/cpp/io/basic_ofstream/basic_ofstream) – NathanOliver
Неправильно по содержанию. Оба std :: ofstream и std :: thread имеют конструкторы перемещения. Почему вы думаете, что у вас есть проблема? Предоставьте сообщение компилятора. – SergeyA
изменить 'MyClass (const MyClass && other)' в 'MyClass (MyClass && other)' –