Выделяет ли new () память для функций класса? - PullRequest
5 голосов
/ 19 января 2010
class Animal
{
public:
  int a;
  double d;
  int f(){ return 25;} 
};

Предположим, что для приведенного выше кода я пытаюсь инициализировать объект, говоря new Animal(), это new() также выделяет память для функции f()?

Другими словами, Какая разница в терминах выделения памяти, если бы вместо этого у меня был этот класс и new Animal()? :

class Animal
{
public:
  int a;
  double d;
};

Ответы [ 2 ]

7 голосов
/ 19 января 2010

Для класса без виртуальных функций сами функции не занимают пространство данных. Функции - это фрагменты кода, которые могут быть выполнены для манипулирования данными. Это члены данных, которые должны быть выделены.

Когда у вас есть виртуальный класс, часто есть дополнительный указатель для виртуальной таблицы. Обратите внимание, что vtable является специфической деталью реализации. Хотя большинство компиляторов их используют, вы не можете рассчитывать на то, что они всегда будут там.

Я расширил по этому ответу на ваш другой вопрос.

3 голосов
/ 19 января 2010

Нет.Функции существуют на текстовой странице, поэтому для них не выделено места.

...