Может ли экземпляр класса удалить себя с помощью интеллектуального сброса указателя, не вызывая проблем? [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Может ли экземпляр класса удалить себя с помощью интеллектуального сброса указателя, не вызывая проблем? [дубликат]

Сообщение Anonymous »

У меня вопрос, возникнут ли проблемы со следующей конструкцией конечного автомата, если конечный автомат удалит свой собственный интеллектуальный указатель и установит для использования новый. Интеллектуальный указатель принадлежит другому классу.
Вот пример кода, который мне нужен.

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»