我正在研究C ++ 11中的移动语义,并进入类似的部分:
char...
我知道在第一个SomeClass bar = createSomeClass(); //creates some object of SomeClass
foo(bar);
foo(createSomeClass());
编译器将调用foo
的复制构造函数,第二个SomeClass
编译器将调用一个重载的移动构造函数,因为{{1返回一个R值。
如果我没有宣布复制构造函数怎么办?那么编译器如何实际知道如何复制这些对象呢?
答案 0 :(得分:0)
除非类声明复制构造函数,删除复制构造函数或声明移动操作,否则将自动提供默认复制构造函数(执行成员复制)。仍然会自动提供默认的复制构造函数是用户声明的析构函数或复制赋值运算符,但不推荐使用。
除非类声明复制赋值运算符,删除复制赋值运算符或声明移动操作,否则将自动提供默认复制赋值运算符(执行成员复制)。仍然会自动提供默认的复制构造函数是用户声明的析构函数或复制构造函数,但不推荐使用。
只有当类没有声明任何复制操作,移动操作或析构函数时,才会自动提供默认移动构造函数和移动赋值运算符。