Вызов виртуальному методу во время строительства обходит виртуальную диспетчерскую 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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