Вызов виртуальному методу во время строительства обходит виртуальную диспетчерскую C ++C++

Программы на C++. Форум разработчиков
Anonymous
Вызов виртуальному методу во время строительства обходит виртуальную диспетчерскую C ++

Сообщение Anonymous »

У меня есть следующий код: < /p>

Код: Выделить всё

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 () .
- это что -то еще, чем что Я описываю происходящее? Сообщение LLVM версии 17.0.6

Подробнее здесь: https://stackoverflow.com/questions/794 ... dispatch-c

Вернуться в «C++»