我有一个成员指针与这种类型的:实例化一个新对象。不确定这是否正确?
const TopState<TestHSM>* state_;
state_
是多态型的。
TopState
是基:
template<typename H>
struct TopState {
//... functions etc
};
有一个位的层级的最后LeafState
这是不抽象:
template<typename H, unsigned id,
typename B=CompState<H,0,TopState<H> > >
struct LeafState : B {
//...functions
static const LeafState obj;
};
以下对象表示状态:
//indentation to indicate state nesting
typedef CompState<TestHSM,0> Top;
typedef CompState<TestHSM,1,Top> S0;
typedef CompState<TestHSM,2,S0> S1;
typedef LeafState<TestHSM,3,S1> S11;
typedef CompState<TestHSM,4,S0> S2;
typedef CompState<TestHSM,5,S2> S21;
typedef LeafState<TestHSM,6,S21> S211;
只能注意S11
和S211
(LeafState
's)可以被实例化。
我有一个TestHSM
类,看起来像这样:
class TestHSM {
public:
TestHSM() {
state_ = new S11;
}
//fix destruction - problem
~TestHSM() {
//reset to s11
// state_ = &S11;
// delete state_;
// state_ = 0;
}
void next(const TopState<TestHSM>& state)
{
state_ = &state;
}
private:
const TopState<TestHSM>* state_;
};
我的问题,现在是state_
对象的创建。参见上面的构造函数。这有效,但我不完全确定它是否是正确的做事方式?
S11
是第一个可以实例化对象的状态 - 在我的程序S11
是启动时的第一个状态。代码“按预期工作”。无论如何还是好像。但我不确定这是否是最佳或甚至正确的方式来安抚第一个国家?
此外,如果我这样做,那么当我尝试删除state_
时,会出现堆内存运行时错误 - 请参阅注释析构函数代码。
有什么建议吗?
安格斯
你可以使代码最小? – 2012-03-24 09:44:34