12-2 委托构造函数
委托构造函数
为了合理复用构造函数,C++11提供了委托构造函数。委托者被成为委托构造函数,被委托者被称为代理构造函数。
下面是一个例子:
class X |
此外有几个注意点:
-
每个构造函数可以委托另一个代理构造函数(包括代理构造函数)
-
不要递归循环委托
-
委托构造函数的初始化列表中不能再对数据成员和基类进行初始化
-
委托构造函数的执行顺序:
- 代理构造函数的初始化列表
- 代理构造函数主体
- 委托构造函数主体
-
代理构造函数执行完成后,在委托构造函数主体抛出了异常,则会调用类的析构函数(因此类已经被代理构造函数构造了,只是在委托构造函数的主体中进行进一步的赋值)
- 注意:正常构造函数执行过程中如果抛出异常,不会调用析构函数,从而会产生资源泄露等问题。
发布于