Oggi sono andato a un colloquio di lavoro e mi è stata data questa interessante domanda.Un puntatore può puntare il punto di base a una matrice di oggetti derivati?
Oltre alla perdita di memoria e al fatto che non esiste un operatore virtuale, perché questo codice si arresta?
#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();
}
Oltre al punto e virgola mancante, vuoi dire? (Sarebbe un errore in fase di compilazione, tuttavia, non in fase di esecuzione) –
Sei sicuro che fossero tutti virtuali? –
@Yochai, sì ne sono sicuro. –