c++ - 这段代码的运行结果问题

查看:82
本文介绍了c++ - 这段代码的运行结果问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

代码:

#include <iostream>
using namespace std;
class Base{
public:
    Base():data(count){ ++count; }
    ~Base(){ --count; }
    static int count;
    int data;
};
int Base::count;

class Derived: public Base{
public:
    Derived(): data(1){}
    int data;
};

int main(){
    Base* pb = new Derived[4];
    cout<<pb[0].data<<endl;
    cout<<pb[1].data<<endl;
    cout<<pb[2].data<<endl;
    cout<<pb[3].data<<endl;
    delete[] pb;
    return 0;
}

我理解中三个输出应该是0,1,2,但是编译之后结果是0,1,1. 这段代码有内存泄露,我不知道是不是这个原因,望大神指点。

解决方案

Base* pb = new Derived[4];数组是不提供多态性质的,当你用pb[0],pb[1],...的方式获取数组元素时,获取的并不是Derived对象,在你的case来看,pb指针每次偏移sizeof(int)的地址长度,恰巧你的Base类和Derived类都有data成员变量,所以每次输出值其实是Base::data。内存分布应该是01|11|21|31。‘|’分隔derived类。我讲的应该不太清晰,你可以参考这位大牛的讲解。http://coolshell.cn/articles/9543.html

这篇关于c++ - 这段代码的运行结果问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆