Re[12]: Книжка по UB
От: so5team https://stiffstream.com
Дата: 14.08.25 08:24
Оценка:
Здравствуйте, rg45, Вы писали:

S>>Пришел к выводу, что причина спора в этом обсуждении в том, что часть участников (Лазар, Marty, watchmaker) придерживаются той точки зрения, что механизм виртуальной диспетчеризации работает потому, что он работает именно так, как описано в стандарте. Т.е. если в программе происходит именно то, что и следует по стандарту языка C++, то значит все работает и работает так, как надо.


R>Так стандарт же описывает каким должно быть поведение программы, а не детали реализации этого поведения. И единиственный вывод, который можно сделать из стандарта как раз тот самый — что вызов виртуальных функции из конструкторов/деструкторов даёт тот же эффект, что и прямой невиртуальный вызов.


Ну не совсем:
class c1 {
  virtual void f() {...};
  ...
};

class c2 : public c1 {
  void f() override {...};
  ...
};

class c3 : public c2 {
  ... // нет своей версии f().
};

class c4 : public c3 {
public:
  c4() { f(); }
};


В конструкторе c4 мы не делаем прямой вызов c2::f, но именно эта версия и будет вызвана.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.