我想在main()函數中創建類實例時使用便利函數來使事情更清晰。右值引用和設置函數
下面是一個小例子:
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)' –