Tôi đã đi phỏng vấn xin việc hôm nay và được đưa ra câu hỏi thú vị này.Có thể trỏ đến điểm cơ sở đến một mảng các đối tượng có nguồn gốc không?
Bên cạnh rò rỉ bộ nhớ và thực tế không có dtor ảo, tại sao mã này gặp sự cố?
#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();
}
Bên cạnh dấu chấm phẩy còn thiếu, ý bạn là gì? (Đó sẽ là một lỗi biên dịch thời gian, tuy nhiên, không phải thời gian chạy) –
Bạn có chắc là tất cả đều là ảo không? –
@Yochai, vâng tôi chắc chắn. –