![]() |
1
3
对我来说,这样的努力在很大程度上是不值得的。你真的没有提高可读性,不寻常的构造会让未来维护你的代码的程序员感到困惑,而新类的加入增加了复杂性,从而使你暴露在更多错误的可能性中。 我可以看到,您很少需要或想要控制静态初始化的顺序,或者出于其他原因,打包所有静态。但从可读性的角度来看,我更喜欢久经考验的:
如果你有很多这样的静态数据,为什么不把它们全部发送到自己的CPP文件中呢?但话说回来,如果你真的有那么多的静力学,我想知道是否有一些错误的整体设计在第一位。。。 |
![]() |
2
0
要明确的是,全局变量通常有三个问题(不仅仅是静态变量):
当然,大多数时候破坏并不是什么问题,但它仍然存在。 新的C++ 0x是线程感知的,因此存在一些增益(特别是对于多线程问题的本地静态变量)。 随着C++ 0x的出现,下面的代码可能只会遭受“销毁命令FASASCO”的影响…当然,除非你在初始化时有一个循环引用。
这很好:因为实例是按需创建的,所以当您需要时,它保证它在那里,并且即使在多个线程同时尝试访问函数时,C++也保证了行为。 现在,“破坏令惨败”怎么办? 好吧,对象的解构顺序与它们的构造顺序相反,因此如果你需要在解构器中访问一个对象,那么在构造函数中访问它只是为了确保它在你之前被构建,并且一切正常。 当然,没有C++ 0x的东西有点令人耳目一新。为了避免多线程问题,唯一的建议是在应用程序仍然是单线程(main)时首先访问所有变量。这样所有实例都被创建,不再存在任何并发问题。 |
![]() |
J. Doe · 线程静态变量与实例化 7 年前 |
![]() |
D.B · django静态文件不随虚拟环境出现 7 年前 |
![]() |
157 239n · 我可以在UI线程之外使用getFilesDir吗 7 年前 |
![]() |
John David · ——等待这个。方法();在静态方法中不起作用 7 年前 |
![]() |
Yu.Pan · Spring boot项目找不到静态文件 7 年前 |
![]() |
Yu.Pan · 无法在springboot静态内容中获取文件 7 年前 |
![]() |
BaCh · C++:使用名称相同但参数不同的类成员和静态函数失败 7 年前 |