C++编程中的细节--内容覆盖

来源:互联网 发布:上海数据库开发培训 编辑:程序博客网 时间:2024/05/29 18:07

      一个简单的示例来讲解下这个问题。

class Concrete{public:private:int val;char c1;char c2;char c3;};class Concrete1{public:int val;char bit1;};class Concrete2 :public Concrete1{public:char bit2;};class Concrete3 :public Concrete2{public:char bit3;};int main(){Concrete2 *pc2;pc2->val = 10;pc2->bit1 = 'a';pc2->bit2 = 'b';Concrete1 * pc1_1, *pc1_2;pc1_1 = pc2;*pc1_2 = *pc1_1;cout<< pc2->bit2<<endl;return 0;}

本来bit2的值是b,但是通过赋值后 bit2的内容被pc1_1指向的对象中为分配的内存内容覆盖了(因为编译器有个内存对齐的操作,也就是上面的三个类的大小分别是8bytes,12bytes,16bytes)还是贴张图吧。

当经过这个操作:

pc1_1 = pc2;*pc1_2 = *pc1_1;
对象pc1_1中未分配的内容就复制给了pc1_2指向的对象。

以后写程序的时候还真得注意这些小细节。