Да, это правильно. Определение утечки памяти - это ситуация, когда вы не можете удалить что-то, что вы создали (и за время жизни которого вы, следовательно, отвечаете за управление).
Как указывают ответы на этот вопрос, delete one
вызывает неопределенное поведение (которое в большинстве случаев, вероятно, приведет к обычной утечке старой памяти, но вещи могут быть такими же плохими, как носовые демоны ), поскольку тип времени выполнения указанного объекта не соответствует его статическому (объявленному) типу, а статический тип не имеет виртуального деструктора.
Применимый раздел из стандарта C ++:
§5.3.5 / 3: В первом альтернативном варианте (удаление объекта), если статический тип операнда отличается от его динамического типа, статический тип должен быть базовым классом динамического типа операнда и статического типа. должен иметь виртуальный деструктор или поведение не определено.
Решение - объявить все деструкторы virtual
или не удалять объекты через указатель на One
.