C++-构造函数
职责
- 对所有的类成员变量进行初始化, 让对象构造后处于一个可用的状态(Good State)
要点
若在构造函数中抛出异常,则析构函数不被执行,因为该对象没有完全构建,会导致delete无效指针
构造函数抛出异常时,本应该在析构函数中被delete的对象没有被delete,会导致内存泄露
按功能分类
默认构造函数
1 | T(); // 没有参数 |
无需参数的构造函数,提供一种无需参数就可初始化的能力
转换构造函数
1 | T(...) |
除默认构造函数外,没有explicit
修饰的构造函数
提供其他数据类型向该类型隐式转换(implicit conversion)的能力
此类构造函数,在复制初始化(copy initialization)中会被编译器考虑选用
复制构造函数
1 | T(const T &t); |
从一个本类型值构造出新对象,提供pass by value能力
移动构造函数
1 | T([const|volatile]T &&t); |
从一个本类型值快速构造出新对象,提供了move语义
显式构造函数
1 | explicit T(...) |
除默认构造函数外,explicit
修饰的构造函数
提供其他数据类型向该类型显式转换(explicit conversion)的能力
此类构造数据,在直接初始化(direct initialization)或显式转换(static_cast
等)中会被编译器考虑选用,复制初始化不能使用此类函数