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

Vin*_*ent 6 c++ optimization performance inheritance

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

  • 执行时间处理时间
  • 记忆

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

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

在此输入图像描述

Luc*_*ore 8

执行时间处理时间

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

记忆

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

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

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