Tôi đã đến một cuộc phỏng vấn việc làm ngày hôm nay và được đưa ra câu hỏi thú vị này.
Ngoài việc bộ nhớ bị rò rỉ và thực tế là không có dtor ảo, tại sao đoạn mã này lại bị lỗi?
#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 **
Nó đang trỏ đến một mảng Hình chữ nhật. Khi đó, quyền truy cập đáng lẽ phải là các hình [i] -> draw ();
->
là một sai lầm của một biên tập viên.