我正在删除一个反对的分段错误,被基类的指针引用,即使我已经声明析构函数是虚拟的!
这是我的代码
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;
}
Run Code Online (Sandbox Code Playgroud)
`
行析构函数被调用!
形状析构函数被称为!
./runCP.sh:line 2:2915分段错误./a.out
我理解在A行中,对象被切片,这就是原因,我收到了这个错误.但是,我无法弄清楚对象切片如何导致分段错误.
如果对象已被切片,则不得调用虚析构函数,但此处也会调用虚析构函数.
请帮我理解这个.
Jam*_*lis 13
您只能delete分配一个对象new.
myShapePtr不指向分配的对象new,它指向的myLine是一个局部变量.
作为局部变量,myLine具有自动存储持续时间.当它到达声明它的块时,它将被自动销毁}.
| 归档时间: |
|
| 查看次数: |
1042 次 |
| 最近记录: |