【发布时间】:2022-08-09 21:46:09
【问题描述】:
我在stackoverflow中看到
//define in .h
inline void fun()
{
static int i; // one instance include in multiple cpp
}
static inline void fun1()
{
static int i; // multiple instance included in multiple cpp
}
我经常以这样的模式写单例
//define in .h
class Singleton
{
static Singleton& Instance()
{
static Singleton s;
return s;
}
private:
int i;
}
很多程序员都是这样写的,有人能解释一下是否正确,C++如何保证一个实例? 实际上在 inline 和 static inline 版本中,并没有明确的 cpp 声明来保证单实例。
-
该标准(过于简单化)只要求函数的调用始终运行,无论该函数是否是内联的,并且实现纠正任何问题以满足单一定义规则。这是如何实现的因实现(编译器等)而异——
fun1()中的i是static,因此实现必须确保fun1()的所有调用都使用相同的i。一些实现(编译器)使用引用计数 - 当fun1()被调用并且计数为零时,i被初始化并且计数增加。但实现不是必需的要做到这一点。