読者です 読者をやめる 読者になる 読者になる

sizeof(Hoge)==0?

はてブコメントより。id:sankasekiさん曰く

クソして寝る前にC言語でClassを記述して欲しい、ついで言うとサンプルソースの様にClass固有のメモリ領域が不要である場合(メンバ変数なし等)、環境によってはclassポインタがNULLになり a: b: c: が一致する

あり、
クラス固有のデータを持たない場合も、
sizeofの結果は最低1になり、
new演算子が呼び出すoperator newには最低でもその1が渡される筈、
とか思ってましたが、これって保証された仕様じゃなかったかしら?
そうでないと、
A a;
B b;
で、AもBもsizeofの結果が0ならば&a==&bが一致してしまう。

sizeof演算子はデータ型のメモリ上に占める大きさを結果とするようにしなければならない。

だったと記憶しているのですが。
試しに、

class A
{
public:
    A (){}
    ~A (){}
};

class B
{
public:
    B (){};
    ~B (){};
};

class C : public A, public B
{
public:
    C (){}
    ~C (){}
};

int main()
{
    A a;
    B b;
    C c;
    printf("a:%d\n", sizeof(a));
    printf("b:%d\n", sizeof(b));
    printf("c:%d\n", sizeof(c));
    
    return 0;
}

gccで書いてみたが、きちんと全て1になってくれた。
C++の設計と進化」
プログラミング言語 C++ 第3版」
を見直しているけれど、見つからないなあ。