使用文件作用域的c++静态函数
C++ -using file scope static function
我期望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()中的对象应该只在函数第一次被调用时构造(假设调用该函数的不同线程之间没有争用;我不确定在线程情况下会发生什么,但这不是问题)。在整个应用程序中,这个函数应该只返回一个对象。
顺便说一句,这不是关于"文件作用域静态函数",而是关于"函数作用域静态变量"。
相关文章:
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 检查编译时是否存在静态函数
- 名称隐藏对静态函数继承的实例使用
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 类中静态函数C++意外结果
- 在工人类中使用不同类的静态函数进行实验
- 类 Referention 中C++回调函数引用非静态函数
- 指向模板上下文中的成员函数或静态函数的指针
- 如何检测 Clang AST C++中的静态函数
- 内联asm编译器屏障(内存阻塞器)是算作外部函数,还是算作静态函数调用
- 如何在静态函数中使用成员函数数组
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- 生成代码(在编译时)以调用模板的每个实例化的静态函数
- C++无法访问或使用静态函数
- 如何将 cpp 文件中的静态函数公开给其他文件
- 将函数的引用设置为其他 c++ 文件中的非静态函数
- 方法的静态函数的等价性
- 扩展包含静态函数的类
- 非静态函数可以访问静态变量吗?
- 调用非静态函数作为谓词?