Столкнулся с такой проблемой: есть класс 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_;
};