C++ C++;FSM设计和所有权

C++ C++;FSM设计和所有权,c++,parsing,oop,fsm,C++,Parsing,Oop,Fsm,我想为这种语法实现一个FSM/“下推自动机”解析器:它已经“词法化”为 我有以下资料: class State { public: virtual State* event( const string &token ); State* deleteDaughter(); private: A* m_parent; A* m_daughter; } class SomeState : public State { public: State* eve

我想为这种语法实现一个FSM/“下推自动机”解析器:它已经“词法化”为

我有以下资料:

class State
{
public:
    virtual State* event( const string &token );
    State* deleteDaughter();
private:
    A* m_parent;
    A* m_daughter;
}
class SomeState : public State
{
public:
    State* event( const std::string &token );
}
使用
B
event()
执行(在多次if-elseif之后)
返回m_parent->deleteDimension()
。我知道这是可疑的(它崩溃了),但我需要一种方法从子
状态返回父
状态
,并确保子
状态
没有泄漏

我的事件循环如下所示:

while( somestringstream >> token )
    state = state->event();
在你责骂设计和最后一段代码之前,我试着从中扩展一个非常简单的示例,这似乎还不错。为了清晰和简洁,我将决定部分转移到各州本身


我知道有很多关于这个主题的书,但我不是计算机科学家/程序员,我想自己学习(当然,在所有友好人士的帮助下)。如果概念不清楚,请询问。谢谢

尽管您仍可以发表您的看法,但我已经想出了如何优雅地处理一切:

第一:我的事件循环将保留一个指向最后创建的
状态*
的指针

第二:每个
状态
都有一个指向父
状态
的指针,在构造函数中初始化,默认为0(如果用于除第一个
状态以外的任何状态*
,则内存泄漏);这保证了任何国家都不会超出范围

第三:
State*endOfState()
函数,它正是这样做的(我特别为此感到自豪)

State* State::endOfState()
{
    State* parent = m_parent; // keep member pointer after suicide
    delete this;
    return parent;
}
当从子类的
事件()
中调用它时,它将正确地删除自身,并返回父指针(在梯形图中向上)

如果仍然存在泄漏,请通知我。如果解决方案不清楚,请询问:)


PS:说句公道话,灵感是从

中偷来的。请尽管发表您的看法,但我已经想出了如何优雅地处理一切:

第一:我的事件循环将保留一个指向最后创建的
状态*
的指针

第二:每个
状态
都有一个指向父
状态
的指针,在构造函数中初始化,默认为0(如果用于除第一个
状态以外的任何状态*
,则内存泄漏);这保证了任何国家都不会超出范围

第三:
State*endOfState()
函数,它正是这样做的(我特别为此感到自豪)

State* State::endOfState()
{
    State* parent = m_parent; // keep member pointer after suicide
    delete this;
    return parent;
}
当从子类的
事件()
中调用它时,它将正确地删除自身,并返回父指针(在梯形图中向上)

如果仍然存在泄漏,请通知我。如果解决方案不清楚,请询问:)

PS:为了公平起见,灵感是从