默认移动构造、默认移动赋值自动生成的条件

简介: 默认移动构造、默认移动赋值自动生成的条件

一、默认移动构造函数什么时候会自动生成?

如果需要用一个右值去拷贝构造一个类对象或赋值给一个类对象,则在该类自定义了移动构造函数/移动赋值函数的情况下,会调用该类自定义的移动构造函数/移动赋值函数

而在没有自定义移动构造函数/移动赋值函数的情况下,如果该类自定义了拷贝构造函数/赋值运算符或析构函数之一,都只会调用拷贝构造函数/赋值运算符(前提是形参为const T&而不是T&,因为const T&可以兼容右值实参,而T&不能)而不会生成默认移动构造函数。注意即使没有自定义拷贝构造函数/赋值运算符,只自定义了析构函数,也不会生成默认移动构造函数,这是因为自定义析构函数表明该类在析构时可能需要回收内存,如果生成了默认移动构造函数可能会出错(比如同一地址被释放两次的错误)

  1. 没有声明拷贝构造函数
  2. 没有声明赋值运算符
  3. 没有声明析构函数

二、默认移动赋值什么时候会自动生成?

  1. 没有声明拷贝赋值函数。
  2. 没有声明拷贝构造函数。
  3. 没有声明移动构造函数。
  4. 移动赋值函数没有隐式声明为delete。
  5. 没有声明析构函数。
目录
相关文章
|
5月前
自定义封装一个方法让这个方法可以判断所有的数据类型并返回
自定义封装一个方法让这个方法可以判断所有的数据类型并返回
16 0
C++中转换构造函数与默认函数的优先级
C++中转换构造函数与默认函数的优先级
接口的讲解-强制约束-可选属性-任意多个属性-只读属性
接口的讲解-强制约束-可选属性-任意多个属性-只读属性
|
Java
【Groovy】循环控制 ( Java 语法循环 | 默认的 IntRange 构造函数 | 可设置翻转属性的 IntRange 构造函数 | 可设置是否包含 to 的构造函数 | 0..9 简写 )(一)
【Groovy】循环控制 ( Java 语法循环 | 默认的 IntRange 构造函数 | 可设置翻转属性的 IntRange 构造函数 | 可设置是否包含 to 的构造函数 | 0..9 简写 )(一)
133 0
|
Java
【Groovy】循环控制 ( Java 语法循环 | 默认的 IntRange 构造函数 | 可设置翻转属性的 IntRange 构造函数 | 可设置是否包含 to 的构造函数 | 0..9 简写 )(二·)
【Groovy】循环控制 ( Java 语法循环 | 默认的 IntRange 构造函数 | 可设置翻转属性的 IntRange 构造函数 | 可设置是否包含 to 的构造函数 | 0..9 简写 )(二)
125 0
|
存储 Kotlin
【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )
【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )
195 0
【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )
|
API
@JsonView 处理返回值,实现接口返回想要的字段
@JsonView 处理返回的json ,实现返回需要的字段
1572 0
使用接口来统一控件的取值、赋值和初始化
      这里说的控件主要指的是文本框、下拉列表框这一类的控件,用户使用这些控件输入数据,然后我们需要提取这些数据进行处理。但是不同的控件有不同的取值方式,比如文本框要用Text,下拉列表框是SelectedValue (当然还有其他的方法),CheckBoxList也是SelectedValue,但是这个只能获取第一个选项,如果是选择了多个选项,他只能返回第一个被选中的选项。
828 0
|
数据库
automapper如何全局配置map条件过滤null值空值对所有映射起效
原文 automapper如何全局配置map条件过滤null值空值对所有映射起效 我们在使用automapper的时候经常会遇到这样的问题:假设展示给用户的数据我们用UserDto类,User类就是我们的实体类。
1450 0

热门文章

最新文章