Код: Выделить всё
class IInterface {
public:
virtual ~IInterface() {}
virtual void doSomething() = 0;
};
class Concrete : public IInterface {
public:
Concrete() : data{0} {doSomething();}
void doSomething() override {std::cout
Вызов виртуального метода во время строительного обхода виртуальной диспетчеры < /p>
< /blockquote>
[*] Что означает сообщение? Меня предупреждает, что статическая диспетчер Concrete :: dosomething () Это ub?
Скажи, что мы делаем бетон c; < /code>. Это то, что я думаю, это происходит: < /p>
- память для объекта C < /code> выделена. < /Li>
Аннотация Конструктор класса называется. __Vptr указывает на чистую виртуальную функцию. - Вызывает конструктор Concrete . Инициализация любых нестатических членов происходит. Завершена инициализация, __vptr теперь указывает на реализацию Concrete dosomething () . Тело конструктора выполняется, и он должен вызвать переопределенный dosomething () .
Подробнее здесь: https://stackoverflow.com/questions/794 ... dispatch-c