具有自动默认值和移动构造函数的不可复制类

西尔杜斯

我想让某些类使用自动生成的构造函数,但不可复制(但仍可移动)。目前,我正在这样做:

class A
{
public:
    A() = default;
    A(const A&) = delete;
    A(A&&) = default;
    A& operator=(const A&) = delete;
    A& operator=(A&&) = default;
}

我想知道是否真的需要如此明确。如果我这样写的话:

class A
{
    A(const A&) = delete;
    A& operator=(const A&) = delete;
}

它仍然可以正常工作吗?对于其他情况-不可复制的不可移动类以及带有虚拟析构函数的类,最小的默认值和删除集是什么?

有什么测试代码可以用来快速查看隐式创建了哪些构造函数?

代词

这将不起作用,因为不会自动为您创建默认的构造函数。由于已声明复制构造函数,因此不会创建默认构造函数。它被定义为delete,但是仍然是用户声明的,因此没有隐式默认的默认构造函数。

隐式创建的构造函数的简化规则是:

  • 除非您已声明Big 5的任何其他特殊功能(并且除非由不可移动的成员或基地阻止),否则默认隐式创建默认的移动构造函数和默认的移动分配运算符。
  • 默认的默认构造函数(名称!)是隐式创建的,除非您已声明任何构造函数(并且除非由非默认创建的成员或基数阻止)
  • 除非您声明了move构造函数或move分配运算符(并且除非受到不可复制的成员或基础的限制),否则将创建默认的副本构造函数和默认的副本分配运算符

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

复制或移动具有成员std :: mutex(或其他不可复制对象)的类的构造函数?

来自分类Dev

具有移动构造函数和分配的类的默认副本构造函数和分配

来自分类Dev

具有模板化构造函数以及复制和移动构造函数的类

来自分类Dev

具有Java中构造函数默认值的超类覆盖子类

来自分类Dev

具有默认值的Scala构造函数

来自分类Dev

具有参数默认值的构造函数

来自分类Dev

map / unordered_map具有不可移动的默认可构造值类型

来自分类Dev

具有移动语义的RAII类中的默认构造函数应该做什么?

来自分类Dev

自动完成功能不显示xcode中具有默认值的函数参数

来自分类Dev

默认值struct和构造函数顺序

来自分类Dev

自动变量初始化和复制/移动构造函数

来自分类Dev

复制和移动构造函数自动成为朋友吗?

来自分类Dev

复制构造函数和移动构造函数具有相同的运行时间并且没有调用移动构造函数

来自分类Dev

未初始化的串行端口属性是否具有使用默认构造函数时的默认值?

来自分类Dev

是否可以让“命名构造函数”返回私有构造的,不可移动的,不可复制的std :: optional <T>?

来自分类Dev

具有std :: string属性的默认移动构造函数行为

来自分类Dev

在 C++ struct 中,构造函数中的默认值和默认参数有什么区别?

来自分类Dev

Java是否具有默认的复制构造函数(如C ++)?

来自分类Dev

从具有移动语义或返回值优化的函数返回值,但不从复制构造函数返回

来自分类Dev

具有函数头和默认值的Elixir装饰器

来自分类Dev

具有默认值的抽象类

来自分类Dev

具有类默认值的模板参数

来自分类Dev

具有类继承的kwargs中的默认值

来自分类Dev

获取具有默认值的函数参数

来自分类Dev

在构造函数中传递默认值

来自分类Dev

Dart Flutter:在为类构造函数设置默认值时,可选参数的默认值必须恒定

来自分类Dev

复制具有指针作为成员变量的类的构造函数

来自分类Dev

复制具有原子成员的类的构造函数

来自分类Dev

复制在C ++中具有自指针的类的构造函数?

Related 相关文章

  1. 1

    复制或移动具有成员std :: mutex(或其他不可复制对象)的类的构造函数?

  2. 2

    具有移动构造函数和分配的类的默认副本构造函数和分配

  3. 3

    具有模板化构造函数以及复制和移动构造函数的类

  4. 4

    具有Java中构造函数默认值的超类覆盖子类

  5. 5

    具有默认值的Scala构造函数

  6. 6

    具有参数默认值的构造函数

  7. 7

    map / unordered_map具有不可移动的默认可构造值类型

  8. 8

    具有移动语义的RAII类中的默认构造函数应该做什么?

  9. 9

    自动完成功能不显示xcode中具有默认值的函数参数

  10. 10

    默认值struct和构造函数顺序

  11. 11

    自动变量初始化和复制/移动构造函数

  12. 12

    复制和移动构造函数自动成为朋友吗?

  13. 13

    复制构造函数和移动构造函数具有相同的运行时间并且没有调用移动构造函数

  14. 14

    未初始化的串行端口属性是否具有使用默认构造函数时的默认值?

  15. 15

    是否可以让“命名构造函数”返回私有构造的,不可移动的,不可复制的std :: optional <T>?

  16. 16

    具有std :: string属性的默认移动构造函数行为

  17. 17

    在 C++ struct 中,构造函数中的默认值和默认参数有什么区别?

  18. 18

    Java是否具有默认的复制构造函数(如C ++)?

  19. 19

    从具有移动语义或返回值优化的函数返回值,但不从复制构造函数返回

  20. 20

    具有函数头和默认值的Elixir装饰器

  21. 21

    具有默认值的抽象类

  22. 22

    具有类默认值的模板参数

  23. 23

    具有类继承的kwargs中的默认值

  24. 24

    获取具有默认值的函数参数

  25. 25

    在构造函数中传递默认值

  26. 26

    Dart Flutter:在为类构造函数设置默认值时,可选参数的默认值必须恒定

  27. 27

    复制具有指针作为成员变量的类的构造函数

  28. 28

    复制具有原子成员的类的构造函数

  29. 29

    复制在C ++中具有自指针的类的构造函数?

热门标签

归档