C++初始化笔记
文章目录
符合以下规则:
- 默认构造函数(使用类内初始值和默认值,如果没有类内初始值,而且不是静态类型,一般是残值)
- 有定义构造函数,则不合成默认构造函数,除非使用=default
- 构造函数初始值列表进行初始化
- 构造函数内部,进入构造函数内部,所有成员已经完成初始化,对成员进行后续操作可以看成是一个函数在进行初始化。
下面的代码,初始化逻辑:
- 进入到构造函数内部之后,所有的成员变量都已经完成了初始化。此时,成员b采用默认构造函数进行初始化。打印第一个 default
- 使用默认构造函数创建一个临时对象B(),打印第二个 default。
- B() 是一个右值,所以调用右值赋值函数,但是由于B的移动构造函数是删除的,所以只能使用拷贝赋值函数 B& operator=(const B&) 来作为备选,本来一个const B& 也可以指向一个临时的右值 B()。
- 使用赋值拷贝函数,将临时对象B()拷贝给成员b。打印 B assign
|
|
##三五法则
为了不用去考虑复杂的C++默认合成函数的细则,如果已经定义了任何一个构造函数,其余的构造函数最好都定义一遍。默认构造函数,拷贝构造,拷贝赋值,移动构造,移动赋值。其中移动赋值需要考虑赋值对象是自身的情况。
文章作者 xnhp0320
上次更新 2017-07-14