C++ Singleton design pattern我遇到了这个问题,了解到有两种方法可以在 C++ 中实现单例模式。
1) 在堆中分配单个实例并在 instance() 调用中返回它
2) 在instance() 调用中返回一个静态实例,这也称为惰性初始化实现。
但我认为第二种,即惰性初始化实现,由于以下原因是错误的。 从 instance() 调用返回的静态对象具有内部链接,并且在不同的翻译单元中将具有唯一的拷贝。因此,如果用户修改单例,它不会反射(reflect)在任何其他翻译单元中。
但是有很多说法说第二种实现是正确的,我是不是漏掉了什么?
最佳答案
在方法的上下文中,static
关键字与链接无关。它只是影响定义变量的“存储类”。对于静态局部变量,标准明确规定:
9.3.6 A static local variable in a member function always refers to the same object, whether or not the member function is inline.
因此,将代码放在头文件还是 cpp 文件中根本无关紧要。
请注意,对于自由/非成员函数,它确实取决于函数的链接,正如 KerrekSB 指出的那样。
关于C++ 单例惰性初始化实现和链接似乎有冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42457227/