我有一個成員指針與這種類型的:實例化一個新對象。不確定這是否正確?
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