Самое универсальное решение этой проблемы - извлечь ваш класс из базового класса, который имеет виртуальную функцию "убийства".Примерно так:
class IDisposable {
public:
virtual void Release() = 0;
};
Обычно считается, что полиморфные объекты должны иметь виртуальные деструкторы для поддержки правильной очистки объекта.Однако это неполно, поскольку не учитывает потенциально различное управление памятью объектов.
С другой стороны, этот метод не требует использования виртуальных деструкторов.Теперь она заменена функцией Release
, которая выполняет оба действия: вызывает правильный деструктор и освобождает память соответствующими средствами.
заботится о объекте destr
оба: destruct
Объект, возвращенный фабрикой, будет реализовывать этот "интерфейс".