在构造过程中将引用传递给以后的成员

时间:2019-01-15 21:05:50

标签: c++ language-lawyer

假设我们有以下内容:

struct C;
struct B {
  C& c;
  B(C& c) : c{c} {}
};

struct A;
struct C {
  A& a;
  C(A& a) : a{a} {}
};

struct A {
  B b;
  C c;
  A() : b(c), c(*this) {}
};

c初始化成员变量this似乎是合法的,因为初始化器列表中有this can be used to refer to the object being initialized。但是,当将c传递给b的构造函数时,c的生命周期尚未开始,并且自it does have a reference member起,旧指针无法用于操作新的{{1 }}对象。

我相信上面的代码表现良好/直观上合理,因为C在对象b完全构建之前从未使用过c的引用。

该语言的哪一部分说明可以正常工作?

编辑:澄清一下,c对象的构造完成后,通过c访问b合法的原因是什么?即所有的生命开始之后。

0 个答案:

没有答案