下面这段代码运行时会出现什么问题?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
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
;
}
|
本题知识点
参考解析添加解析
- 更多回答(5条)
-
确实会输出A,但同时程序也会崩溃。因为delete a这一句会出错,a实际还是一个B类型,但是析构函数没有声明为虚函数,导致调用了A的默认析构函数,内存溢出了。发表于 2015-09-