Вот пример кода, который мне нужен.
Код: Выделить всё
class State
{
public:
virtual ~State()
{
};
virtual void Do_State_Stuff() = 0;
};
class State_1 : public State
{
public:
State_1(Owner_Class* p_owner)
{
mp_owner = p_owner;
}
~State_1()
{
}
void Do_State_Stuff() override
{
if (something_specific_happens)
{
mp_owner->m_state.reset(new State_2(mp_owner)); // Change state to a different one
// DOES THE ABOVE LINE CAUSE TROUBLE AS THIS CLASS INSTANCE CALLS ITS OWN DESTRUCTOR HERE?
return;
}
...do_something_here...
}
private:
Owner_Class* mp_owner = nullptr;
};
class Owner_Class
{
public:
void Do_Something()
{
mp_state->Do_State_Stuff();
}
private:
friend class State_1;
std::unique_ptr mp_state;
};
Разрешено ли «удалить это» в C++?
Причина в том, что после строки удаления экземпляра будут строки кода. Есть «возврат», а также после замыканий есть другие строки кода. Также здесь используется интеллектуальный указатель вместо явного вызова «delete».
Подробнее здесь: https://stackoverflow.com/questions/798 ... ausing-tro
Мобильная версия