static就是保证只有一个实例,不管你申请了多少个CMfxTrace的实例或
对象,但是只有一份该函数的拷贝。

解决方案 »

  1.   

    static修饰的函数在没有CMfxTrace的实例的时候也可以调用
      

  2.   

    如果不声明为static,则每一个对象都有分别不同的CMfxTrace对象,这样将起不到tracer的作用啦!
      

  3.   

    static修饰的函数在没有CMfxTrace的实例的时候也可以调用.不管你申请了多少个CMfxTrace的实例或对象,但是只有一份该函数的拷贝
      

  4.   

    谢谢回答。
    可是我还是不明白在一个类被定义的时候就可以包含自己吗?如上面的
    static CMfxTrace theTracer;被包含在类声明中。这样做的目的是什么?
      

  5.   

    我接着你上面的疑问回答:
    1、一各类可以被定义为自己本身的成员,你还记得C中的链表吗?那个结构指针不就是自己结构本身吗?一个抽象类型被编译时它只为自己的成员按照成员相应的类型分配相应的内存空间,你在static CMfxTrace theTracer前一精声明了CMfxTrace是一个Class所以编译器在此只为theTracer分配一个Class变量的大小的空间,所以这是可行的。
    2、static CMfxTrace theTracer被包含在类的声明中是为了实例化CMfxTrace类型的一个变量,从上面的声明可以看出它的构造函数是私有的,所以你在未部无法实例化此类,这样这个例子就能做到,要实例化CMfxTrace必须调用Init函数,而一旦调用了Init那么着各类的功能就被限制在trace的作用范围内了,他不能做别的工作,只能作为一个afxDump.m_pFile 被使用。
      

  6.   

    static就是保证只有一个实例,不管你申请了多少个CMfxTrace的实例或
    对象,但是只有一份该函数的拷贝。