委托构造函数允许一个构造函数调用同类的另一个构造函数以复用初始化逻辑。语法为在初始化列表中直接调用目标构造函数,如Rectangle() : Rectangle(1, 1) {}。示例中默认构造函数和单参数构造函数均委托给双参数构造函数完成初始化,避免重复代码。执行顺序是被委托的构造函数先运行,再执行当前构造函数体。注意:只能在初始化列表中委托,不能与其他成员初始化混用;不能形成循环委托;析构函数仍只调用一次。合理使用可提升代码可维护性。

在C++11中,可以使用委托构造函数让一个构造函数调用同一个类中的另一个构造函数。这种机制允许你在多个构造函数之间复用初始化逻辑,避免代码重复。
什么是委托构造函数
委托构造函数是指在一个构造函数的初始化列表中,调用该类的另一个构造函数。被调用的构造函数先执行,然后继续执行当前构造函数的函数体。
语法格式如下:
MyClass() : MyClass(default_value) { }explicit MyClass(int x) : MyClass(x, 0) { }
MyClass(int x, int y) : data1(x), data2(y) { }
使用示例
下面是一个简单的例子,展示如何使用委托构造函数:
立即学习“C++免费学习笔记(深入)”;
#include iostream>class Rectangle {
private:
int width;
int height;
public:
// 委托目标:完整构造函数
Rectangle(int w, int h) : width(w), height(h) {
std::cout }
// 默认构造函数:委托给 Rectangle(1, 1)
Rectangle() : Rectangle(1, 1) {
std::cout }
// 单参数构造函数:假设是正方形
explicit Rectangle(int size) : Rectangle(size, size) {
std::cout }
void print() const {
std::cout }
};
int main() {
Rectangle r1; // 调用 Rectangle() → 委托到 Rectangle(1,1)
r1.print();
Rectangle r2(5); // 调用 Rectangle(5) → 委托到 Rectangle(5,5)
r2.print();
Rectangle r3(3, 4); // 直接调用 Rectangle(3,4)
r3.print();
return 0;
}
输出结果为:
主构造函数被调用默认构造函数完成
宽:1, 高:1
主构造函数被调用
单参数构造函数完成
宽:5, 高:5
主构造函数被调用
宽:3, 高:4
注意事项和限制
使用委托构造函数时需要注意以下几点:
- 只能在初始化列表中调用其他构造函数,且必须是唯一一项(不能和其他成员初始化混用)
- 一个构造函数只能委托给另一个构造函数,不能同时初始化其他成员变量在初始化列表中
- 不能形成委托循环,比如 A 调用 B,B 又调用 A
- 被委托的构造函数完全执行完毕后,才会执行当前构造函数的函数体
- 析构函数不会被自动调用两次,资源管理仍由对象生命周期控制
基本上就这些。合理使用委托构造函数可以让代码更简洁、易维护。注意初始化顺序和逻辑清晰即可。










