【发布时间】:2015-12-23 11:30:49
【问题描述】:
我想在我的 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有一个移动构造函数。 it is the copy constructor that is deleted -
内容有误。 std::ofstream 和 std::thread 都有移动构造函数。为什么你认为你在那里有问题?提供编译器消息。
-
把
MyClass( const MyClass &&other )改成MyClass( MyClass &&other )
标签: c++ c++11 move-semantics