C ++中的继承运行时成本(无虚拟)?

时间:2012-08-14 17:29:29

标签: c++ performance optimization inheritance

在使用-O3编译的C ++中,没有虚拟性的继承是否具有以下成本:

  • 执行时间
  • 存储器

如果答案是肯定的:为什么?

作为一个例子:MyClass1和MyClass2在性能和内存方面是否相同?

enter image description here

2 个答案:

答案 0 :(得分:8)

  

执行时间

什么?函数是静态解析的,因此函数调用是相同的。 MyClass1的构造函数将调用基类的构造函数,并且它的析构函数将调用基类的析构函数,因此对于构造和构造函数来说。破坏可能会有一些开销。 也许。有些编译器可能会优化呼叫。

  

存储器

这将是相同的,两者都只有一个成员double。理论上。取决于实现我猜,因为标准没有规定,但最常见的是没有内存开销。

注意通过指向MyClass1的指针删除对象Derived会导致未定义的行为,因为没有virtual析构函数。

注意2 没有多态的继承是代码气味。不是说这是错的,但在大多数情况下,成分更好。

答案 1 :(得分:-3)

就内存空间而言,我猜你的MyClass1消耗更多,因为它需要跟踪所有类结构和关系。为了表现,我没有看到任何显着的差异。

相关问题