贝利信息

C++中的委托构造函数是什么?(代码复用)

日期:2026-01-11 00:00 / 作者:穿越時空
委托构造函数是C++11特性,允许一个构造函数在初始化列表中调用同类其他构造函数以复用初始化逻辑;被委托者先执行,委托者体后执行,且委托必须独占初始化列表。

委托构造函数是C++11引入的特性,允许一个构造函数调用同一个类的另一个构造函数,从而避免重复代码,实现构造逻辑的复用。

委托构造函数的基本写法

在构造函数初始化列表中,用类名(参数...)的形式调用本类其他构造函数:

典型复用场景示例

比如一个Person类有多种构造方式,但核心字段(姓名、年龄)总要校验和赋值:

class Person {
    std::string 

name_; int age_; public: // 主构造函数(做完整校验和初始化) Person(const std::string& n, int a) : name_(n), age_(std::max(0, a)) { if (n.empty()) throw std::invalid_argument("name cannot be empty"); } // 委托构造:只传姓名,默认年龄为0 Person(const std::string& n) : Person(n, 0) {} // ← 委托给上面的构造函数 // 委托构造:只传年龄,默认姓名为空字符串 Person(int a) : Person("", a) {} };

这样,校验逻辑只写一次,维护更简单,也不用把初始化逻辑挪到私有辅助函数里。

注意事项和限制

本质上,委托构造函数不是“调用函数”,而是把初始化责任转交给另一个构造路径——对象只被初始化一次,语义清晰,复用自然。基本上就这些。