代码:
#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