作者:新洋之家140 | 来源:互联网 | 2023-10-10 06:43
为什么这段代码只会执行一次构造函数 第二次和第三次会跳过构造函数
是否与函数是static和对象的类型是static有关?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| singleton.h
#ifndef SINGLETON_H_
#define SINGLETON_H_
class Singleton
{
public:
static Singleton * GetTheOnlyInstance();
protected:
Singleton(){}
private:
...
};
#endif |
1 2 3 4 5 6 7 8 9
| singleton.cpp
#include "singleton.h"
Singleton * Singleton::GetTheOnlyInstance()
{
static Singleton objSingleton;
return &objSingleton;
} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 调用程序 main.cpp #include
#include "singleton.h"
using namespace std;
int main()
{
Singleton * ps1 = Singleton::GetTheOnlyInstance();
Singleton * ps2 = Singleton::GetTheOnlyInstance();
Singleton * ps3 = Singleton::GetTheOnlyInstance();
cout <
return 0;
}
输出结果
0x6013b0
0x6013b0
0x6013b0
证明ps1、ps2、ps3是同一个地址 即同一个对象 |