根据cpp参考cpp-ref,如果我们有用户定义的析构函数,则编译器不会生成默认的move构造函数。
程式码片段:
class General
{
public:
~General();
General();
void testInitList();
};
int main(int argc, char **argv) {
General b(std::move(General()));
General g = std::move(b);
g.testInitList();
return 0;
}
该代码进行编译,表示编译器生成了默认的move构造函数。该代码是使用gcc版本5.4.0编译的。
有人可以解释为什么在这种情况下,尽管编译器具有析构函数,但为什么编译器仍会生成move构造函数和move赋值运算符?
最好,拉胡尔
如果没有移动构造函数或赋值运算符,则不执行任何移动。std :: move不执行移动。它只是蒙上它的参数表明,此举可能被执行,如果可能的。如果不可能的话,那就没有动静,使用std::move
什么也不做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句