【发布时间】:2012-11-06 05:23:11
【问题描述】:
在阅读 Oliveira 和 Stewart 的《Writing Scientific Software》一书时,我偶然发现了这段有趣的段落:
"共享变量是危险的,应该在共享库中避免使用
因此,如果您正在编写共享或动态链接库,请避免使用
static或saved局部变量并避免使用全局变量。”(第 55 页)
但是static 成员函数呢?这些在共享库中是否同样危险?我也应该避免这些吗?为什么/为什么不?
【问题讨论】:
-
作者给出的原因是代码不会重入;也就是说,让多个应用程序运行同一个 DLL 是有风险的,因为静态/全局变量会被共享。
-
感谢您澄清这一点。
-
关于静态成员/变量和共享;共享库中的一个好用例是全局事件和线程ID。这很容易导致线程安全。其他静态成员通常最好放置在对其上下文敏感的类/结构内的库的关联头文件中。同时,您总是希望对您在全球空间中的位置非常严格。
标签: c++ c static global-variables shared-libraries