ポリモーフィズムの側面について混乱しています。次のコードを検討してください。
#include <iostream>
class CBase {
virtual void dummy() {}
};
class CDerived: public CBase {
public:
int a,b,c,d;
CDerived (): a(1),b(2),c(3),d(4) { }
};
int main () {
CBase* pba = new CDerived;
std::cout << "sizeof(CBase) = " << sizeof(CBase) << std::endl; // prints 8
std::cout << "sizeof(CDerived) = " << sizeof(CDerived) << std::endl; // prints 24
std::cout << "sizeof(*pba) = " << sizeof(*pba) << std::endl; // prints 8 (?)
return 0;
}
私の質問は次のとおりです。ラインでは、タイプ(24バイト)CBase* pba = new CDerived;
のオブジェクトCDerived
が割り当てられていますが、ご覧のとおり、sizeof(*pba) = 8
バイトです。CDerived
が指すオブジェクトの残りの 16 バイトはどうなりましたpba
か? 私もこれを試しました:
std::cout << "pba->a = " << pba->a << std::endl;
しかし、コンパイルエラーが発生しました。つまり、pba
実際には type のオブジェクトを指していませんCDerived
。それで、ここで何が起こったのですか?メモリーリーク?