C++11 委派构造函数

一 委派构造函数

《深入理解C++11》

委派构造:就是指委派函数将构造的任务派给了目标构造函数来完成这样一种类构造的方式。
C++11中的委派构造函数是在构造函数的初始化列表位置进行构造的、委派的
“基准版本”的构造函数称为目标构造函数,调用“基准版本”的构造函数称为委派构造函数

举例:

namespace demo1 {
struct A {
  A() {
    init();
  }
  A(int a) : A() {} // 委派构造
 private:
  void init() {
    std::cout << "init" << std::endl;
  }
};
}

 二  注意

1 构造函数既可以同时是目标构造函数和委派构造函数

namespace demo2 {
struct A {
  A() {
    init();
  }
  A(int a) : A() {}
  A(int a, char* s) : A(a) {} // A(int)既是目标构造函数也是委派构造函数, 注意不能形成环
 private:
  void init() {}
};
}

2 委派构造函数不能有初始化列表

namespace demo3 {
struct A {
  A() {
    init();
  }
  // A(int a) : A(), a_(a) {} // 不能同时委派和使用初始化表
  A(int a) : A() {
    a_ = a;
  }
 private:
  void init() {}
  int a_;
};
}

3 目标构造函数中的异常可以在委派构造函数中捕获

namespace demo4 {
struct A {
  A() {
    std::cout << "A()" << std::endl;
    throw 0;
  }
A(int a) try :
    A() {
    std::cout << "A(int)" << std::endl;
  } catch (...) {
    std::cout << "catch exception!" << std::endl;
    // exit(1);
  }
};
}


int main() {

  demo4::A a(1);

  getchar();
  return 0;
}

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值