我希望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();
}
答案 0 :(得分:1)
GetStudent()中的对象只应在第一次调用函数时构造(假设调用该函数的不同线程之间没有争用;我不确定在线程情况下发生了什么,但这不是题)。在整个应用程序中确实应该只有一个从该函数返回的对象。
BTW,这不是关于“文件范围静态函数”,而是关于“函数范围静态变量”。