C ++ - 使用文件范围静态函数

时间:2011-12-30 00:30:03

标签: c++

我希望GetStudent()函数返回Student的唯一实例。正如我所料,该函数返回Student Class的唯一实例。我仔细检查了GetStudent()函数返回的内存地址。但非常奇怪的是,每次调用GetSutent()函数时,Student的构造函数都会调用。代码如下。编程环境是VC6.0& MFC项目。

   //someApp.h
    Student& GetStudent();


    //someApp.cpp
    Student& GetStudent()
    {
       static Student _student;
       return _student;
    }


    //client1Class.cpp
    #include "someApp.h"
    void CCliend1Class::DoSomething()
    {
      GetStudent().DoSomething();
    }



    //client2Class.cpp
    #include "someApp.h"
    void CClient2Class::DoSomething()
    {
      GetStudent().DoSomething();
    }

1 个答案:

答案 0 :(得分:1)

GetStudent()中的对象只应在第一次调用函数时构造(假设调用该函数的不同线程之间没有争用;我不确定在线程情况下发生了什么,但这不是题)。在整个应用程序中确实应该只有一个从该函数返回的对象。

BTW,这不是关于“文件范围静态函数”,而是关于“函数范围静态变量”。