Je suis allé à un entretien d'embauche aujourd'hui et j'ai reçu cette question intéressante.
Outre la fuite de mémoire et le fait qu'il n'y ait pas de dtor virtuel, pourquoi ce code plante-t-il?
#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();
}
Shape **
Il pointe vers un tableau de rectangles. Ensuite, l'accès aurait dû être des formes [i] -> draw ();
->
était une erreur commise par un éditeur.