Fac*_*Bro 1 c++ singleton linkage
C++ 单例设计模式我遇到这个问题并了解到在 C++ 中有两种实现单例模式的方法。
1)在堆中分配单个实例并在instance()调用中返回它
2)在instance()调用中返回一个静态实例,这也称为延迟初始化实现。
但我认为第二个,即延迟初始化实现,是错误的,原因如下。从instance()调用返回的静态对象具有内部链接,并且在不同的翻译单元中具有唯一的副本。因此,如果用户修改单例,它不会反映在任何其他翻译单元中。
但有很多说法表明第二种实现是正确的,我是否遗漏了什么?
在方法的上下文中,static关键字与链接无关。它只影响所定义变量的“存储类别”。对于静态局部变量,标准明确指出:
9.3.6 成员函数中的静态局部变量始终引用同一个对象,无论成员函数是否内联。
因此,将代码放在头文件还是 cpp 文件中根本不重要。
请注意,对于自由/非成员函数,它确实依赖于函数的链接,正如 KerrekSB 指出的那样。
| 归档时间: |
|
| 查看次数: |
808 次 |
| 最近记录: |