Re: Вызов вирт. метода из родительского деструктора
От: Centaur Россия  
Дата: 05.12.10 04:12
Оценка:
Здравствуйте, sanx, Вы писали:

S>class BaseClass
S>{
S>public:
S>    ~BaseClass() { Free(); }
S>    void Free() { ЧТО-ТО_ОБЩЕЕ_ДЛЯ_ВСЕХ; FreeResource(); }
S>protected:
S>    virtual void FreeResource() = 0;
S>};


S>Метод Free нужен публичный, он делает некоторые вещи (по освобождению ресурсов) общие для всех унаследованных классов, и плюс каждый класс должен не забыть реализовать метод освобождения специфических для него ресурсов FreeResource. Но понятно что в деструкторе будет вызываться чисто виртуально абстрактный метод базового класса (FreeResource() = 0). Как быть?


Это неправильный дизайн. Сделайте, чтобы освобождение ресурсов выполнялось только при уничтожении объекта, в (виртуальном) деструкторе. Вместо вызова функции Free устройте, чтобы в этом месте объект уничтожился, например, введением дополнительного scope.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.