7

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

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

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

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

在此处输入图像描述

4

2 回答 2

8

执行时间处理时间

什么的?函数是静态解析的,所以函数调用是一样的。MyClass1的构造函数会调用基类的构造函数,其析构函数会调用基类的析构函数,所以构造和销毁可能会有一些开销。也许。一些编译器可能会优化调用。

记忆

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

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

注意 2没有多态性的继承是代码异味。并不是说这是错误的,但在大多数情况下,构图更好。

于 2012-08-14T17:32:46.400 回答
-3

在内存空间方面,我猜你的 MyClass1 消耗更多,因为它需要跟踪所有类结构和关系。对于性能,我没有看到任何显着差异。

于 2012-08-14T17:34:54.570 回答