I_love_natalia's blog

By I_love_natalia, 12 years ago, In Russian
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?

  • Vote: I like it
  • +22
  • Vote: I do not like it