使用成员的地址来初始化基类是否合法?

时间:2018-06-03 13:52:14

标签: c++ initialization undefined-behavior

这段代码合法吗?:

class BaseClass
{
  public:
    BaseClass (int *p) : p_ (p) { }

  private:
    int *p_;
};

class SubClass : public BaseClass
{
  public:
    SubClass () : BaseClass (&i_), i_ (123) {}

  private:
    int i_;
};

众所周知,基类在子类成员之前构造,这就是我想知道的原因。

1 个答案:

答案 0 :(得分:1)

是的,这很好:虽然SubClass::i的(相关实例)的生命周期尚未开始,但它的存储空间存在,并且可能会形成指向它的指针(尽管还没有used for much