Могу ли я удалить динамически размещенный класс, используя функцию из этого класса? - PullRequest
2 голосов
/ 12 октября 2009

Я пишу государственный менеджер для игры. У меня есть большая часть логики для того, как я хочу сделать это. Я хочу, чтобы состояния, которые будут классами, обрабатывались в стеке в классе StateManager. Каждое состояние будет иметь функции паузы, а стек будет стеком STL.

Когда состояние завершается с тем, что ему нужно сделать (например: на экране паузы пользователь нажимает «вернуться в игру»), его необходимо удалить из стека и удалить. Моя текущая логика (которую я, к сожалению, не смог проверить) была бы такой:

Государство заканчивает свою работу. В своей функции обновления, когда он обнаружит, что это сделано, он вызовет функцию для очистки состояния. Эта функция позаботится о любых непосредственных свободных концах, которые необходимо связать (если они есть), вызовет функцию pop из стека менеджера состояний и удалит себя.

Я спрашиваю: могу ли я удалить класс из себя?

Ответы [ 4 ]

6 голосов
/ 12 октября 2009

См. C ++ - FAQ-lite: Законно (и морально) ли функция члена сказать delete this?

Пока вы осторожны, объект может покончить с собой (удалите это).

0 голосов
/ 12 октября 2009

Sure:

void cleanup(){
 delete this;
}

Конечно, есть много вещей, в которых вы должны быть уверены (не в последнюю очередь это то, что у вас будет плохо, если вы попытаетесь сделать это с экземпляром, который был создан в стеке.

0 голосов
/ 12 октября 2009

Да - delete this; действительно. Просто убедитесь, что это последнее, что связано с классом, выполняемым в функции, которая выполняет удаление.

0 голосов
/ 12 октября 2009

Можно, даже можно позвонить:

delete this;

Но это волосатое, уродливое и, возможно, опасное ...

Связанный:

...