使用文件作用域的c++静态函数

C++ -using file scope static function

本文关键字:c++ 静态函数 作用域 文件      更新时间:2023-10-16

我期望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();
    }

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

顺便说一句,这不是关于"文件作用域静态函数",而是关于"函数作用域静态变量"。