编译器定义了带有析构函数的move构造函数

时间:2019-06-16 01:20:52

标签: c++ move-constructor

根据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赋值运算符?

最好, 拉胡尔

1 个答案:

答案 0 :(得分:2)

没有移动构造函数或赋值运算符时,不执行任何移动。 std::move不执行移动。它只是将其参数强制转换为表明,如果可能的话,将执行 动作。如果不可能的话,那就没办法了,使用std::move不会做任何事情。