职责

  • 对所有的类成员变量进行初始化, 让对象构造后处于一个可用的状态(Good State)

要点

  • 若在构造函数中抛出异常,则析构函数不被执行,因为该对象没有完全构建,会导致delete无效指针

  • 构造函数抛出异常时,本应该在析构函数中被delete的对象没有被delete,会导致内存泄露

按功能分类

默认构造函数

1
2
T(); // 没有参数
T(int i=0); // 参数有默认值

无需参数的构造函数,提供一种无需参数就可初始化的能力

转换构造函数

1
T(...)

除默认构造函数外,没有explicit修饰的构造函数

提供其他数据类型向该类型隐式转换(implicit conversion)的能力

此类构造函数,在复制初始化(copy initialization)中会被编译器考虑选用

复制构造函数

1
2
3
T(const T &t);
T(T t);
T(T t, int i=0)

从一个本类型值构造出新对象,提供pass by value能力

移动构造函数

1
T([const|volatile]T &&t);

从一个本类型值快速构造出新对象,提供了move语义

显式构造函数

1
explicit T(...)

除默认构造函数外,explicit修饰的构造函数

提供其他数据类型向该类型显式转换(explicit conversion)的能力

此类构造数据,在直接初始化(direct initialization)显式转换(static_cast等)中会被编译器考虑选用,复制初始化不能使用此类函数

参考

  1. http://en.cppreference.com/w/cpp/language/converting_constructor
  2. http://en.cppreference.com/w/cpp/language/move_constructor

留言