GCC выдает «вызов чистого виртуального метода», но не тогда, когда включена оптимизация.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 GCC выдает «вызов чистого виртуального метода», но не тогда, когда включена оптимизация.

Сообщение Гость »

У меня есть абстрактный базовый класс ITracer с чисто виртуальным методом logMessage.
У ITracer также есть виртуальный деструктор.
У меня есть производный класс NullTracer, который реализует logMessage.У меня есть класс TestClass, конструктор которого опционально принимает константную ссылку ITracer. Если ITracer не указан, создается экземпляр NullTracer.
TestClass имеет метод test, который вызывает logMessage своего ITracer.
В GCC 11.2 «вызывается чисто виртуальный метод» генерируется, и на стандартный вывод выводится «привет».
В GCC 11.2 и -O2 исключения не выдаются, и на стандартный вывод выводятся как «привет», так и «тест».
Во-первых, в неоптимизированном случае, что я делаю не так? Я не понимаю, какие чисто виртуальные функции я вызываю, у NullTracer явно есть реализация.
Во-вторых, в оптимизированном случае, почему больше нет исключения и почему оно выполняется так, как Я этого ожидаю?
Редактировать: не могу поверить, что пропустил висящую ссылку. Спасибо

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

#include 

class ITracer {
public:
virtual ~ITracer() = default;
virtual void logMessage() const = 0;
};

class NullTracer : public ITracer {
public:
void logMessage() const override { std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/71289454/gcc-throws-pure-virtual-method-called-but-not-when-optimizations-are-on[/url]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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