是否应该在共享库中避免使用静态成员函数?

时间:2012-11-06 05:23:11

标签: c++ c static global-variables shared-libraries

在阅读奥利维拉和斯图尔特的“写作科学软件”一书时,我发现了这段有趣的文章:

  

共享变量是危险的,应该在共享库中避免

     

因此,如果您正在编写共享或动态链接库,请避免使用staticsaved局部变量并避免使用全局变量。“

     

(第55页)

但是static成员函数呢?这些在共享库中同样危险吗?我也应该避免这些吗?为什么/为什么不呢?

3 个答案:

答案 0 :(得分:4)

  

但是static成员函数呢?这些在共享库中同样危险吗?

完全没有:static成员函数不应该被避免:与表示共享状态的static变量不同,static成员函数表示共享计算。只要这些计算是无状态,它们就完全没有危险。

答案 1 :(得分:2)

静态功能不是问题。事实上,科学软件中常用的许多函数都是纯数学函数,例如sin()sqrt()log()

另一方面,

静态变量是共享状态的指标,应该避免。

答案 2 :(得分:1)

不是天生的。不使用任何静态的静态成员函数(例如仅使用本地或线程局部变量的静态成员函数)并不安全。这些方法经常用于备受推崇的库中,例如boost或guava(最后一个来自java世界的例子)。