灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3543回复:0

[C++技术]C++编程中的细节--内容覆盖

楼主#
更多 发布于:2012-10-15 12:49

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

[cpp]

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)还是贴张图吧。

图片:20121015112300163.png

当经过这个操作:

[cpp]

pc1_1 = pc2;

*pc1_2 = *pc1_1;

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

图片:20121015112304213.png

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


喜欢0 评分0
游客

返回顶部