今天在看《设计模式》中的STATE模式时有个问题搞不清楚,
作者为了避免每个状态产生多个对象,用了SINGLETON,就是
每个子类中内含一个私有成员,代码如下:
class TCPEstablished : public TCPState
{
public:
static TCPState* Instance();
... //一些成员函数
private:
TCPState* _instance;
};TCPState* TCPEstablished::_instance = 0;TCPState* TCPEstablished::Instance()
{
if (_instance = 0)
_instance = new TCPEstablished;
return _instance;
}并把缺省构造函数保护起来, 这样外部只能通过Instance函数
来创建TCPEstablished 对象。
我想问的是,这个对象在哪销毁,因为在STATE模式中,对象需要
在不同的状态转换,而每一个状态仅有一个实例,那这个实例
应该在哪里销毁,不然会内存泄漏?
作者为了避免每个状态产生多个对象,用了SINGLETON,就是
每个子类中内含一个私有成员,代码如下:
class TCPEstablished : public TCPState
{
public:
static TCPState* Instance();
... //一些成员函数
private:
TCPState* _instance;
};TCPState* TCPEstablished::_instance = 0;TCPState* TCPEstablished::Instance()
{
if (_instance = 0)
_instance = new TCPEstablished;
return _instance;
}并把缺省构造函数保护起来, 这样外部只能通过Instance函数
来创建TCPEstablished 对象。
我想问的是,这个对象在哪销毁,因为在STATE模式中,对象需要
在不同的状态转换,而每一个状态仅有一个实例,那这个实例
应该在哪里销毁,不然会内存泄漏?
那样的话用SINGLETON就没有意义了,而在程序运行结束的时候销毁对象
只能销毁当前状态的对象,那以前的那些状态对象就泄漏了。