【发布时间】:2011-07-20 14:10:44
【问题描述】:
我在删除对象时遇到分段错误,被基类的指针引用,即使我已经声明了虚拟的析构函数!
这是我的代码
class Shape
{
public:
virtual ~Shape()
{
cout<<"Shape destructor is called!"<<endl;
}
};
class Line : public Shape
{
public:
~Line()
{
cout<<"Line destructor is called!"<<endl;
}
};
int main()
{
Line myLine;
Shape* myShapePtr = &myLine; //Line A
delete myShapePtr;
}
`
输出
调用了行析构函数!
形状析构函数被调用!
./runCP.sh: line 2: 2915 Segmentation fault ./a.out
我知道在 A 行中,对象被切片,这就是我收到此错误的原因。但是,我无法弄清楚对象切片是如何导致分段错误的。
如果对象已经被切片,那么虚拟析构函数肯定没有被调用,但这里也调用了虚拟析构函数。
请帮助我理解这一点。
【问题讨论】:
-
切片并不像你想象的那样。
标签: c++