C ++:声明成员静态与否?虚拟继承的性能?

时间:2015-08-27 13:25:40

标签: c++ multithreading inheritance virtual

我开发了一个C ++代码,其主要对象将在更大的程序中调用。 只需要在主机中创建一个对象实例,因此我一直将所有类变量和方法声明为静态。

  • 我的第一个问题是最佳实践问题:在性能,可移植性和可维护性方面这样做是否是一个好主意?

    一方面,静态成员的缺点是实现多线程变得困难,因为这些成员将被所有线程共享。另一方面,将所有成员重新声明为非静态成员需要使一些遗产成为虚拟,这就引出了第二个问题。

  • 我知道虚拟方法有它们的成本,但虚拟继承本身呢?虚拟继承会影响性能吗?

感谢您的关注。

最好的问候。

3 个答案:

答案 0 :(得分:2)

  

在性能,可移植性和可维护性方面这样做是否是个好主意?

不 - 看起来你的事情比必要的事情更复杂。

  

只需要在主机中创建一个对象实例,因此我一直将所有类变量和方法声明为静态。

有一种称为Singleton的模式可以实现您所需要的,而不是将所有内容都声明为静态。声明你的类正常,只需创建一个实例。

  

我知道虚拟方法有它们的成本,但虚拟继承本身呢?虚拟继承会影响性能吗?

调度虚拟方法的成本非常低,但在绝大多数情况下,它与计算相比相形见绌。这是非常不成熟的优化 - 除非您确定这是一项重大成本,否则不要担心开销。首先介绍,然后优化。 Virtual inheritance是多重继承和“钻石问题”的一个非常特殊的解决方案,但问题中没有足够的信息来确定这是否与您的问题相关。

答案 1 :(得分:1)

今天的系统虚拟方法和继承不会产生很大的影响,除非你期望大量调用虚函数(每秒超过数百万次)。

静态成员往往会产生可维护性问题。

最好的方法通常是从最简单的实现开始,看看它的表现如何。

答案 2 :(得分:0)

我不确定你真的了解多线程。静态方法对于多线程来说不是问题,绝不是它们。它们的行为与独立功能完全相同,并且它们本身没有多线程问题。此外,我没有看到需要使用一个包含所有静态成员的类 - 命名空间中的独立函数会更好。