Hier ist ein Beispielcode, nach dem ich suche.
Code: Select all
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;
};
Ist „delete this“ in C++ erlaubt?
Der Grund dafür ist, dass es nach der Instanzlöschzeile Codezeilen geben wird. Es gibt „return“ und auch nach den Schließungen gibt es andere Codezeilen. Außerdem wird hier ein intelligenter Zeiger verwendet, anstatt explizit „delete“ aufzurufen.
Mobile version