次のコードを検討してください。
#include <iostream>
#include <type_traits>
class Base
{
public: static int f() {return 42;}
};
class Derived : public Base
{
protected: int x;
};
class NotDerived
{
protected: int x;
};
int main()
{
std::cout<<sizeof(Base)<<std::endl;
std::cout<<sizeof(Derived)<<std::endl;
std::cout<<sizeof(NotDerived)<<std::endl;
return 0;
}
g++ 4.7 -O3 を使用すると、次のように出力されます。
1
4
4
それをよく理解していれば、空の基本クラスの最適化が有効になっていることを意味します。
しかし、私の質問は実行時のオーバーヘッドに関するものです。対応するオブジェクトを構築/破棄する必要があるため、Derived
オブジェクトと比較してオブジェクトを作成(および破棄)するオーバーヘッドはありますか?NotDerived
Derived
Base