今天我去了一次面试,并得到了这个有趣的问题。
除了内存泄漏和没有虚拟dtor的事实之外,为什么此代码还会崩溃?
#include <iostream>
//besides the obvious mem leak, why does this code crash?
class Shape
{
public:
virtual void draw() const = 0;
};
class Circle : public Shape
{
public:
virtual void draw() const { }
int radius;
};
class Rectangle : public Shape
{
public:
virtual void draw() const { }
int height;
int width;
};
int main()
{
Shape * shapes = new Rectangle[10];
for (int i = 0; i < 10; ++i)
shapes[i].draw();
}
1
除了缺少分号,您是什么意思?(虽然这是一个编译时错误,但不是运行时)
—
Platinum Azure
您确定它们都是虚拟的吗?
—
Yochai Timmer
它应该
—
RedX 2011年
Shape **
指向矩形数组。然后访问应该是shapes [i]-> draw();。
@Tony祝您好运,然后通知我们:)
—
赛斯·卡内基
@AndreyT:该代码现在是正确的(并且最初也是正确的)。这
—
R. Martinho Fernandes
->
是编辑犯的一个错误。