Re: Вызов вирт. метода из родительского деструктора
От: GreyMan  
Дата: 07.12.10 02:13
Оценка:
Здравствуйте, sanx, Вы писали:

S>Как я понимаю такое невозможно (вот здесь читал http://easy-coding.blogspot.com/2009/09/blog-post.html). Но вот у меня такая задача:


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). Как быть?


class BaseClass
{
protected:
     std::function<void(bool)> clear;//C++0x. или буст тогда
public:
    ~BaseClass() { Free(true); }
    void Free(bool callFromDestructor=false) 
        { 
        ЧТО-ТО_ОБЩЕЕ_ДЛЯ_ВСЕХ; 
        clear(callFromDestructor); 
        }

};

И инициализировать в конструкторе производного класса. Проблема с неопреленным состоянием после вызова деструктора потомка, правда никуда не денется..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.