委托构造函数是C++11特性,允许一个构造函数在初始化列表中调用同一类的其他构造函数以复用初始化逻辑;必须位于初始化列表、不可与其他成员初始化共存、不可循环委托、不能在函数体内调用。

委托构造函数是 C++11 引入的语法特性,允许一个构造函数调用同一类中的另一个构造函数,从而避免重复代码,提升初始化逻辑的复用性和可维护性。
基本写法:用初始化列表调用本类其他构造函数
委托必须出现在构造函数的初始化列表中,且不能与其他成员初始化共存(即被委托的构造函数负责全部初始化)。语法形式为:: ClassName(参数...)。
- 只能委托给同一类的其他构造函数,不能跨类或委托给父类构造函数
- 被委托的构造函数执行完毕后,当前构造函数体才会运行(可用于补充操作)
- 一个构造函数最多委托一次,且不能形成循环委托(编译器会报错)
典型用法:简化多参数构造的重载
当多个构造函数逻辑高度相似时,可提取公共初始化到一个“主构造函数”,其余构造函数委托给它:
struct Person {
std::string name;
int age;
std::string id;
// 主构造函数(处理核心初始化)
Person(std::string n, int a, std::string i)
: name(std::move(n)), age(a), id(std::move(i)) {}
// 委托构造:只提供姓名和年龄,默认ID为空
Person(std::string n, int a)
: Person(std::move(n), a, "") {} // ← 委托给上面那个
// 委托构造:只提供姓名,默认年龄0、ID为空
Person(std::string n)
: Person(std::move(n), 0, "") {}
};登录后复制
注意事项:委托不等于普通函数调用
委托发生在对象生命周期的初始化阶段,不是运行时普通调用。因此:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~