Kann sich eine Klasseninstanz mithilfe des Smart-Pointer-Resets selbst löschen, ohne Probleme zu verursachen? [Duplikat]C++

Programme in C++. Entwicklerforum
Anonymous
 Kann sich eine Klasseninstanz mithilfe des Smart-Pointer-Resets selbst löschen, ohne Probleme zu verursachen? [Duplikat]

Post by Anonymous »

Ich habe eine Frage, ob es Probleme mit dem folgenden Zustandsmaschinenentwurf geben wird, wenn der Zustandsautomat seinen eigenen intelligenten Zeiger löscht und einen neuen zur Verwendung einstellt. Der Smart Pointer gehört einer anderen Klasse.
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;
};
Diese Frage ist nicht dasselbe wie:
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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post