Выделение памяти под методы класса, если объектов более одного

254
05 мая 2017, 19:21

Есть некий класс, сlass A_class; у него есть свойство int b; и метод void action(); который содержит некий код.

Так вот, что будет если в нескольких местах кода создать объекты этого класса в количестве двух и более например A_class C; A_class D; будут созданы полные копии объектов?

Исполняемый код метода action() тоже будет хранится дважды? А если память выделять динамически через new? А как будет хранится явный конструктор в таких случаях? Будет ли компилятор пытаться оптимизировать код и удалять копии методов?

Answer 1

Функции не хранятся в объектах. Можете в этом сами убедиться, применив оператор sizeof к разным классам с одинаковыми полями данных и разным количеством функций. Совершенно не важно как будет создан объект: на стеке или в куче через new. Код (тело функции) хранится в одном единственном экземпляре (про inline пока не буду говорить).

Нестатическая функция-член (метод) отличается от обычной свободной функции только лишь тем, что неявно имеет дополнительный параметр, ссылающийся на экземпляр объекта. Т.е. на хранение кода функции это никак не влияет.

Конструктор в этом плане не является каким-то особенным и может быть рассмотрен как обычная функция.

READ ALSO
Умножение элементов массива

Умножение элементов массива

Здравствуйте, как умножить каждый элемент массива по очереди на каждый элемент другого массиваНапример есть массив А[5] B[5] и нужно умножить...

364
Как вывести ProcessorType из WMI Provider (Win32_Processor)

Как вывести ProcessorType из WMI Provider (Win32_Processor)

Из описания на msdn в Win32_Processor есть поле ProcessorTypeЯ пробую вывести это строками:

206
обращение к переменным объекта JavaScript

обращение к переменным объекта JavaScript

скажите почему след код не выводит измененое имя и возраст?

211
проблема с добавлением текстуры к obj в Three.js

проблема с добавлением текстуры к obj в Three.js

Проблема в том, что я пытаюсь добавить текстуру (накладываю на материал)

220