为了账号安全,请及时绑定邮箱和手机立即绑定

自动生成默认/复制/移动ctor和复制/移动赋值操作符的条件?

自动生成默认/复制/移动ctor和复制/移动赋值操作符的条件?

C++
白猪掌柜的 2019-06-23 16:43:27
自动生成默认/复制/移动ctor和复制/移动赋值操作符的条件?我希望在编译器通常自动生成默认构造函数、复制构造函数和赋值操作符的条件下刷新内存。我记得有一些规则,但我不记得,也找不到有信誉的资源在网上。有人能帮忙吗?
查看完整描述

3 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

在下面,“自动生成”意味着“隐式声明为默认,但未定义为删除”。在某些情况下,特殊成员函数被声明,但定义为已删除。

  • 如果没有用户声明的构造函数,则自动生成默认构造函数(§12.1/5)。
  • 如果没有用户声明的移动构造函数或移动赋值操作符,则自动生成复制构造函数(因为C+03中没有移动构造函数或移动赋值运算符,这将简化为C+03中的“始终”)(§12.8/8)。
  • 如果没有用户声明的移动构造函数或移动赋值操作符,则自动生成复制赋值操作符(§12.8/19)。
  • 如果没有用户声明的析构函数,则自动生成析构函数(§12.4/4)。

C+11及以后仅:

  • 如果没有用户声明的复制构造函数、复制赋值操作符或析构函数,以及生成的移动构造函数有效,则自动生成移动构造函数(§12.8/10)。
  • 如果没有用户声明的复制构造函数、复制赋值操作符或析构函数,并且生成的移动赋值运算符是有效的(例如,如果它不需要分配常量成员),则自动生成移动赋值操作符(§12.8/21)。


查看完整回答
反对 回复 2019-06-23
  • 3 回答
  • 0 关注
  • 681 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信