class A
{
public:
virtual std::string name() = 0;
};
class C
{
public:
C(A* p)
{
std::cout << p->name() << std::endl;
}
};
class B: public A
{
public:
B(): A(), m_obj(this)
{
}
virtual std::string name()
{
return "Hello, world!";
}
C m_obj;
};
Кратко: одно из полей класса в конструкторе по указателю на предка сделало вызов виртуальной функции.
Вопрос: будет работать правильно или все-таки undefined behavior? Т.е. гарантируется ли, что первым делом конструктор инициализирует vtbl?