经典指数          
原因
2452
浏览数
0
收藏数
 

下面这段代码运行时会出现什么问题?
class A
{
public:
    void f()
    {
        printf("A\n");
    }
};

class B: public A
{
public:
    virtual void f()
    {
        printf("B\n");
    }
};

int main()
{
    A *a = new B;
    a->f();
    delete a;
    return 0;
}

  • 没有问题,输出B
  • 不符合预期的输出A
  • 程序不正确
  • 以上答案都不正确

     举报   纠错  
 
切换
1 个答案

确实会输出A,但同时程序也会崩溃。

因为delete a这一句会出错,a实际还是一个B类型,但是析构函数没有声明为虚函数,导致调用了A的默认析构函数,内存溢出了。

 
切换
撰写答案