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

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

Сообщение 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 
< /ul>
Скажите, что мы делаем бетон c; < /code>. Это то, что я думаю, это происходит: < /p>
a) память для объекта C выделяется.
b) Конструктор абстрактного класса называется. __Vptr < /code> указывает на чистую виртуальную функцию.
c) конкретный конструктор вызывается. Инициализация любых нестатических членов происходит. Инициализация завершена, __vptr  теперь указывает на реализацию Concrete Dosommet. Тело конструктора выполняется, и он должен  вызвать переопределение dosomhething . 
Что -то еще, чем то, что я описываю?  

Подробнее здесь: [url]https://stackoverflow.com/questions/79432304/call-to-virtual-method-during-construction-bypasses-virtual-dispatch-c[/url]

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