首页 > 这段代码的运行结果问题

这段代码的运行结果问题

代码:

#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


rootwynn说的很对,另外提供一个工具 c++在线编译

【热门文章】
【热门文章】