может ли класс удалить сам себя
От: win_ce  
Дата: 10.09.09 13:53
Оценка:
Столкнулся с такой проблемой: есть класс State который переключает диалоги, есть классы диалогов Dlg1 и Dlg2 производные от CDialog (MFC).
Диалоги дергают соответствующие методы State, а метод удаляет текущий диалог и создает новый. Т.е. получается, что диалог косвенно удаляет сам себя.
Соответственно если обращаться к State как в Dlg1, где вызов onNext1 это последняя функция, все вроде бы работает нормально. А если как в диалоге Dlg2, где после вызова onNext2, а значит и удаления объекта, есть ещё какой-то код получаю ""First-chance exception".
Собственно вопрос, это нормально и можно ли в принципе удалять самого себя или я перемудрил?


class State
{
    void onNext1()
    {
        delete dlg_;
        dlg_ = new Dlg2(this);    
    }

    void onNext2()
    {
        delete dlg_;
        dlg_ = new Dlg1(this);    
    }

private:
    CDialog *dlg_;
};



class Dlg1
{
public:
    Dlg1(State *state) : state_(state) {}
    void onNext()
    {
        state_->onNext1();
    }
private:
    State *state_;    
};



class Dlg2
{
public:
    Dlg1(State *state) : state_(state) {}
    void onNext()
    {
        state_->onNext2();
        ...
        ещё какой-то код    
    }
private:
    State *state_;    
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.