class Animal
{
public:
int a;
double d;
int f(){ return 25;}
};
Giả sử mã ở trên, tôi cố gắng khởi tạo đối tượng bằng cách nói new Animal()
, điều này new()
cũng cấp phát bộ nhớ cho hàm f()
?Có mới() cấp phát bộ nhớ cho các chức năng của một lớp không?
Nói cách khác, sự khác biệt trong điều khoản phân bổ bộ nhớ nếu tôi có lớp này thay thế và đã thực hiện new Animal()
là gì?:
class Animal
{
public:
int a;
double d;
};
vì vậy, nếu chức năng của tôi là một chức năng ảo (lớp của tôi là trừu tượng), sẽ 'mới()' có bất kỳ vấn đề phân bổ không gian trên heap? – Moeb
Tất cả chức năng ảo có nghĩa là chức năng được thêm vào vtable nằm trong bộ nhớ tĩnh. Chỉ có một bản sao của một vtable cho mỗi lớp sử dụng các chức năng ảo. –
@Ignacio Tôi đang tìm câu trả lời cho: http://stackoverflow.com/questions/2091426/why-cant-we-create-objects-for-an-abstract-class-in-c Tôi nghĩ rằng vấn đề là một cái gì đó liên quan đến phân bổ bộ nhớ, nhưng tôi không thể tìm ra nó. – Moeb