Законно ли использовать адрес члена для инициализации базового класса? - PullRequest
0 голосов
/ 03 июня 2018

Допустим ли этот код?:

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 голосов
/ 03 июня 2018

Да, это хорошо: хотя время жизни of (соответствующий экземпляр) SubClass::i еще не началось, его хранилище существует, и указатель на него может быть сформирован (хотя и не * 1004)* используется для многих пока).

...