Новый () выделяют память для функций класса также?

class Animal
{
public:
  int a;
  double d;
  int f(){ return 25;} 
};

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

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

class Animal
{
public:
  int a;
  double d;
};
5
задан Moeb 19 January 2010 в 06:15
поделиться

2 ответа

. Ну, я обновляю старый проект, используя Qt4.4 и VC2003, и я использую QwtPlot вместо QwtDial. Ошибка:

LNK2001: неразрешенный внешний символ «public: static struct QMetaObject const QwtPlot:: startMetaObject» (? startMetaObject @ QwtPlot @ @ 2UQMetaObject @ @ B)

Только это. Больше ничего. Я нашел ссылки на форум, указывающие на проблемы с отладкой/выпуском миксапов и, возможно, что-то общего с удалением плагина Qt Designer.

Это, кажется, работает на меня: Добавьте строку «DEFINES + = QWT_DLL» в верхнюю часть файла project.pro.

qmake project.pro

nmake release

-121--4667868-

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

4
ответ дан 13 December 2019 в 19:27
поделиться

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

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

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

7
ответ дан 13 December 2019 в 19:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: