empty classのサイズについて

836 ワード

1,まずempty classのサイズが0ではない理由を簡単に説明します.
これは、c++規格には、オペレータnew objectが一意のポインタを返してオブジェクトを指すように規定されているためであり、emptyサイズが0の場合、最下位の操作がmalloc(0)などであることは間違いなく、NULLまたはエラーが返されるため、1に設定される.
実際のアプリケーションでは、emptyがサブクラスのベースクラスまたはダミーベースクラスとして使用される場合、コンパイラは特殊な処理を行い、この追加の1を削除します.

#include<iostream>
using namespace std;

class A
{
};

class B : public A
{
public:
    int v;
};

class C : virtual public A
{
public:
    int v;
};

int main()
{
    cout << sizeof(A) << endl;
    //1
    cout << sizeof(B) << endl;
    //4: empty base      
    cout << sizeof(C) << endl;
    //8    empty virtual base      
    return 0;
}