Не стесняйтесь по-прежнему размещать свой взгляд на это, но я понял, как справиться со всем изящно:
Первое: мой цикл событий будет хранить указатель на последний State*
созданный.
Второе: каждый State
имеет указатель на родительский элемент State
, инициализированный в конструкторе, по умолчанию равный 0 (утечка памяти, если она используется для чего-либо, кроме первого State*
); это гарантирует, что ни одно государство не выйдет за рамки.
Третье: State* endOfState()
функция, которая делает именно это (и я особенно горжусь этим.
State* State::endOfState()
{
State* parent = m_parent; // keep member pointer after suicide
delete this;
return parent;
}
Когда он вызывается из event()
подкласса, он будет должным образом удален и вернет родительский указатель (идущий вверх по лестнице).
Если это все еще содержит утечку, пожалуйста, сообщите мне. Если решение не ясно, пожалуйста, спросите:)
PS: по справедливости, вдохновение было украдено у http://www.codeguru.com/forum/showthread.php?t=179284