Здравствуйте, 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.