7

-O3 でコンパイルされた C++ では、仮想性のない継承には次の点でコストがかかります。

  • 実行時間
  • メモリー

答えが「はい」の場合: なぜですか?

例として: MyClass1 と MyClass2 は、パフォーマンスとメモリの点で同等ですか?

ここに画像の説明を入力

4

2 に答える 2

8

実行時間

なにかの?関数は静的に解決されるため、関数呼び出しは同じです。MyClass1のコンストラクタは基本クラスのコンストラクタを呼び出し、そのデストラクタは基本クラスのデストラクタを呼び出すため、構築と破棄にはオーバーヘッドが発生する可能性があります。多分。一部のコンパイラは、呼び出しを最適化する場合があります。

メモリー

これは同じですが、どちらもメンバーしかありませんdouble。理論的には。標準で義務付けられていないため、実装によって異なりますが、最も一般的にはメモリのオーバーヘッドはありません。

デストラクタがないためMyClass1、ポインタを介してオブジェクトを削除するとDerived、未定義の動作が発生することに注意してください。virtual

注2ポリモーフィズムのない継承は、コードの臭いです。間違っていると言っているわけではありませんが、ほとんどの場合、構成の方が優れています。

于 2012-08-14T17:32:46.400 に答える
-3

In terms of memory space, I guess your MyClass1 consumes more because it needs to keep track of all class structure and relations. For performance I don't see any notable difference.

于 2012-08-14T17:34:54.570 に答える