今天我读了<>。我遇到了一个问题。正如书中所说,
class Concrete1 {
public:
int val;
char bit1;
};
class Concrete2 : public Concrete1 {
public:
char bit2;
};
class Concrete3 : public Concrete2 {
public:
char bit3;
};
当我在mingw g++中运行代码时,三个类的空间是8、12、12。但是当我在vs2012中运行代码时,三个类的空间是8、12、16。当然,代码在vs2012是没有问题的。但是对于g++中的空间,我有一些问题,我尝试写一个示例代码,看看是否有问题。示例代码如下:
int main(void)
{
Concrete2 con2;
memset(&con2, 0, sizeof(con2));
Concrete3 con3;
con3.val = 3;
con3.bit2 = 4;
con3.bit3 = 5;
Concrete2* con_ptr2 = &con2;
Concrete2* con_ptr3 = &con3;
*con_ptr3 = *con_ptr2;
cout << con3.bit3<< endl;
cout << sizeof(Concrete1) << endl;
cout << sizeof(Concrete2) << endl;
cout << sizeof(Concrete3) << endl;
return 0;
}
而对于g++中的对象模型,代码没有问题。为什么在代码“*con_ptr3 = *con_ptr2;”之后,con3.bit3是5而不是0?谁能帮我 ?