![]() |
1
1
这里与并发相关的代码的正确性很难评估。在我看来,这个实现是在试图变得有点太聪明了。
还有人建议依赖编译器特定的行为来初始化静态局部变量。我不认为这是一个可怕的建议,但当您不能依赖编译器来做正确的事情时,有一个选择可能会很好。 |
![]() |
2
3
模板类的静态成员必须在头文件中初始化,并且最近的C++编译器及其链接器必须正确处理。 但你是对的,一些非常旧的编译器对此有问题。 在这些情况下,对于使用单例模板的每种类型,在任意编译单元中只初始化静态成员一次是一种解决方法。 http://gcc.gnu.org/onlinedocs/gcc/Template-Instantiation.html . 显然一个非常坏的主意,当它来存储一个单一的。。。。 更糟糕的是,库(第三方框架)中使用的唯一单例是一些通常以相同方式初始化的配置对象,因此只有在运行时更改配置时才会出现错误。 跟踪这个bug花了好几天时间,直到我们最终在反汇编中看到“同一”成员在不同的内存区域被访问。 |
![]() |
4
1
目前,在C++中,在多线程环境中懒惰地创建一个单体是不可能的。
许多大师(其中包括赫伯萨特)都承认,标准的当前状态并不能保证任何东西。各种编译器都有黑客攻击,boost提供了
目前唯一有效的解决方案(根据标准)是在启动多个线程之前初始化单例,或者在进程的某个部分中,保证只有一个线程访问它。
在这种情况下,根本不需要单例模板类。 |
![]() |
S qasem · Android内存性能 7 年前 |
![]() |
R83nLK82 · 在单例设计模式上引发IOException 7 年前 |
![]() |
hal · 两个课程有什么区别?他们的工作方式不同吗? 7 年前 |
![]() |
Jaquarh · 如何在不使用DI的情况下实例化父类 7 年前 |
|
Deepanshu · 基于PHP的Web应用程序中的单例对象状态 7 年前 |
![]() |
dicle · 视图控制器中的依赖项注入 7 年前 |
![]() |
Kozuki · 如何在生产代码中考虑单例? 7 年前 |