-O3 でコンパイルされた C++ では、仮想性のない継承には次の点でコストがかかります。
- 実行時間
- メモリー
答えが「はい」の場合: なぜですか?
例として: MyClass1 と MyClass2 は、パフォーマンスとメモリの点で同等ですか?
-O3 でコンパイルされた C++ では、仮想性のない継承には次の点でコストがかかります。
答えが「はい」の場合: なぜですか?
例として: MyClass1 と MyClass2 は、パフォーマンスとメモリの点で同等ですか?
実行時間
なにかの?関数は静的に解決されるため、関数呼び出しは同じです。MyClass1
のコンストラクタは基本クラスのコンストラクタを呼び出し、そのデストラクタは基本クラスのデストラクタを呼び出すため、構築と破棄にはオーバーヘッドが発生する可能性があります。多分。一部のコンパイラは、呼び出しを最適化する場合があります。
メモリー
これは同じですが、どちらもメンバーしかありませんdouble
。理論的には。標準で義務付けられていないため、実装によって異なりますが、最も一般的にはメモリのオーバーヘッドはありません。
デストラクタがないためMyClass1
、ポインタを介してオブジェクトを削除するとDerived
、未定義の動作が発生することに注意してください。virtual
注2ポリモーフィズムのない継承は、コードの臭いです。間違っていると言っているわけではありませんが、ほとんどの場合、構成の方が優れています。
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.