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

RGs

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

最好,拉胡尔

Nikos C.

如果没有移动构造函数或赋值运算符,则不执行任何移动。std :: move不执行移动。它只是蒙上它的参数表明,此举可能被执行,如果可能的。如果不可能的话,那就没有动静,使用std::move什么也不做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++自动生成带有用户声明的析构函数的Move构造函数?

编译器是否在析构函数中优化memset?

添加自定义析构函数时,Move构造函数在派生类中消失

编译器是否真的强制执行纯虚拟析构函数?

从std :: streambuf继承时出现不兼容的析构函数编译器警告

默认的虚拟析构函数是否会阻止编译器生成的移动操作?

编译器会忽略显式定义的move构造函数吗?

如何检测构造函数是否为带有抛出析构函数的异常

带有构造函数和析构函数的VS2013外部解析

带有向量的类构造函数中的析构函数调用

对构造函数和析构函数的未定义引用

编译器未生成move构造函数

构造函数/析构函数方法是否有总括术语?

此类的构造函数/析构函数有问题吗?

带有“strictNullChecks”编译器选项的可失败构造函数

为什么带有析构函数的类不能简单地移动构造?

构造函数和析构函数

C ++构造函数/析构函数

对象的构造函数和析构函数

带复制构造函数的析构函数

如何定义析构函数?

为什么带有用户声明的析构函数的类具有隐式默认构造函数?

如果有成员,则基类中的默认析构函数禁用子类中的move构造函数

具有专门析构函数的“析构函数已定义”

如何构造具有删除的析构函数的动态对象?

我需要知道编译器如何与 cpp 中的析构函数一起工作

声明一个空的析构函数可以防止编译器调用memmove()复制连续对象

根据析构函数和move构造函数实现move分配

带有元组参数的函数的编译器混乱