07-2-1,07-2-7

来源:互联网 发布:淘宝网天猫帽子 编辑:程序博客网 时间:2024/05/22 17:15

//07-2-1
 
1 关于C++中静态对象的提前初试化。
 
  C++中可以在main函数之前调用一些方法,比如给静态变量初始化,单体的初始化等,这有方便也有坏处。
  坏处就是没有调用的顺序,有可能出现这样得情况:一个类正在向类管理器(单体)注册类信息(类信息是必须在main之前被确定),但是这个时候的类管理器都还没有初始话!
 
  解决得办法就是将类管理器单体的构造过程放在取单体的方法中:

  class ClassMgr
  {
    static ClassMgr& instance()
    {
      static ClassMgr mg;
      return mg;
    }
  };

// 07-2-3

  *********************************
  这个世界上不应该有单体存在。任何对象都处于各种不同的环境下。
  环境诞生之时,也就是单体生命开始之既。
  ----为单体的初试化和销毁头痛的soniced大人


// 07-2-4

1 对象的销毁

  C++对象的死亡和回收确实需要格外注意。今天我发现了一个例子。
  在一个对象的许多成员对象自动析构的时候,如果这些对象间彼此存在关联,那么析构的顺序有可能会带来些问题。
 
  我的例子是自动工厂:

  class AutoFactory
  {
    Pool pool;
    Factory *fct;
    ~AutoFactory ()
    {
      for (Elem in pool)   
      {
        fct->destroy (elem);
      }
    }
   
    Elem *alloc ();
    void registerFct (Factory* f);
  }

  class Obj
  {
    AutoFactory afct;
    Factory itemFct;
    void someFunc ()
    {
      afct.registerFct (&itemFct);
    }
  } 

  问题在Obj里面,当它的成员afct死亡的时候,将会使用itemFct来回收资源(见AutoFactory的析构函数),
  但是这个时候itemFct还在吗?

// 07-2-7

  今天,图象工厂发现了一个资源泄露的BUG,工厂里面的资源计数器记录了未释放的资源个数。
  终于开始尝到了工厂模式带来的好处了。

原创粉丝点击