class A { public: A(class B &b); A &a; }; class B { public: B( ) : a( *this) {} A &get_a( ) { return a; } A a; }; A::A( B &b) : a( b.get_a( )) {} int main( ) { B b; A a( b); return 0; }
Конкретно такой код будет работать?
Тут есть ub или нет?
Не скомпилируется.
Но можно переписать так, чтобы скомпилировался и работал. Через inline описания методов вне класса.
Окей, переписал что б компилилось. Не суть важна.
Вопрос в том корректно ли всегда будет работать данный код.
если класс B будет иметь наследников с виртуальными методами и ты в методе A::A(B &b) будешь этими методами пользоваться то работать не будет, т.к. ты передаешь в функцию ссылку на не до конца сконструированный объект. В текущем же виде код работать будет без проблем.
Тема в архиве.