如下一段代码在gcc4.2下是可以触发Segmentation fault的,原因在于基类与派生类的大小不同。
#include
using namespace std;
class Point{
public:
Point(){
}
virtual ~Point();
};
Point::~Point(){
cout << "~Point" <
}
class PointImp:public Point{
int _x;
int _y;
public:
PointImp(){
cout << "PointImp" <
}
virtual ~PointImp();
};
PointImp::~PointImp(){
cout<< "~PointImp" <
}
int main(){
Point* p = new PointImp[10];
delete[] p;
return 0;
}
如果把PointImp中的成员int _x, int y移除,程序就好了。Lippman书上解释了一些内部实现的原因,不过我觉得还是可以使语言支持这样的操作更好,毕竟符合人的直觉。
没有评论:
发表评论