今天在看《设计模式》中的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模式中,对象需要
在不同的状态转换,而每一个状态仅有一个实例,那这个实例
应该在哪里销毁,不然会内存泄漏?

解决方案 »

  1.   

    因为我不可能在每一次状态转换的时候就销毁旧的对象,产生新的对象,
    那样的话用SINGLETON就没有意义了,而在程序运行结束的时候销毁对象
    只能销毁当前状态的对象,那以前的那些状态对象就泄漏了。
      

  2.   

    你发现了吗,singleton模式那个类的指针是用的是private修饰,虽然你可以得到这个指针,但是不应该由你自己来释放的,其实singleton的意义就是保持一个实例,在运行中,只要创建了这个实例,以后得到的时候就不应该在有创建过程而是直接返回了,可以不考虑内存释放的问题,程序结束会自动释放的 :)
      

  3.   

    http://www.eaoo.com/design/list.asp?classid=2&Nclassid=13
      

  4.   

    mfc的cview派生类都是这样实现的哦~~~~~