只谈C++11新特性 - 委托构造函数

委托构造函数

C++11 中引入了一个很有用的特性:委托构造函数。这为构造函数提供了强大的便捷性,能够通过一个构造函数委托另一个构造函数的实现,避免重复代码。

C++11 之前的做法

在 C++11 之前,如果需要为不同的构造需求提供多个构造函数,通常需要在每个构造函数中重复实现其他构造函数的初始化逻辑。

例如:

class MyClass {
public:
    // 基本构造函数
    MyClass(int a, int b) {
        x = a;
        y = b;
    }

    // 重复初始化逻辑
    MyClass(int a) {
        x = a;
        y = 0;
    }

    // 重复初始化逻辑
    MyClass() {
        x = 0;
        y = 0;
    }

private:
    int x, y;
};

这种做法导致重复代码,如果初始化逻辑需要修改,则需要在所有构造函数中重复修改。

C++11 委托构造的使用

C++11 引入了委托构造,可以大大减少重复代码。通过委托构造,一个构造函数可以调用另一个构造函数,实现已有代码的重复使用。

示例:

class MyClass {
public:
    // 基本构造函数
    MyClass(int a, int b) : x(a), y(b) {}

    // 委托构造函数
    MyClass(int a) : MyClass(a, 0) {}

    // 委托构造函数
    MyClass() : MyClass(0, 0) {}

private:
    int x, y;
};

示例解释

在上面的示例中:

  1. 基本构造函数 MyClass(int a, int b) 创建了实际的初始化逻辑:传入两个参数并为私有成员 xy 赋值。

  2. 构造函数 MyClass(int a) 委托到基本构造函数,将第二个参数设为默认值 0

  3. 构造函数 MyClass() 委托到基本构造函数,将全部参数设为默认值 0

委托构造的优点

  1. 避免重复代码: 委托构造可以将一些共同的初始化逻辑放到一个构造函数中,其他构造函数通过委托调用。

  2. 提高可维护性: 如果优化或修改初始化逻辑,只需要修改基础构造函数,无需更改其他委托构造。

  3. 便于阅读: 通过委托构造,可以清晰地看出构造函数之间的关系,使代码更加清晰明了。

注意事项

  1. 委托构造只能在构造函数列表中调用,不能在构造函数体内调用。

  2. 委托构造可能会增加一些性能消耗。性能消耗的原因在于:

    • 每次委托调用都会导致额外的函数调用栈层级。这可能会引入一些开销,尤其是在构造函数的调用链较长的情况下。
    • 编译器可能无法完全优化委托调用,尤其是在一些复杂场景中,这可能会增加运行时的额外负担。
  3. 大多数场景下无需担心性能问题: 通常情况下,委托构造的性能消耗是可以忽略不计的。只有在性能要求极高的场景下,才需要针对委托调用进行优化。

通过委托构造,我们可以让 C++ 代码更加简洁、可维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值