Я интересуюсь гайками и boltw C++, и я задался вопросом, что на самом деле изменяется, когда объект инстанцируют. Мне особенно интересно, если функции затем добавляются к памяти, если они там от времени выполнения или если они никогда не хранятся в памяти вообще.
Если кто-либо мог бы направить меня к хорошему сайту на некоторых базовых болтах C и C++, я любил бы это также.
Спасибо, Jo
Типичный случай:
оператора new
. Эта функция, скорее всего, уже будет в памяти, она нужна очень много. Преимущество такого механизма загрузки по требованию состоит в том, что ОС может избежать загрузки кода для класса CPrinter
, если пользователь никогда не намеревается распечатать свой документ.
Не уверен в хорошем веб-сайте, но Внутри объектной модели C ++ - довольно хорошая книга.
По крайней мере, в обычном случае функции-члены существуют полностью независимо от любого экземпляра класса. Вместо этого экземпляр класса - это структура, содержащая (нестатические) элементы данных объекта.Если в классе есть хотя бы одна виртуальная функция, объект также будет содержать указатель на vtable, которая в основном представляет собой массив указателей на функции.
Когда вызывается функция-член, адрес этого объекта передается функции как скрытый параметр (многие компиляторы резервируют регистр только для нее), а в функции он называется this .
Все функции хранятся в самом исполняемом файле, поэтому они загружаются с самого начала.
Выделяется вся память, необходимая этому объекту для переменных-членов.
Если вам интересно, как функция узнает, какой объект она вызывается, по сути, существует невидимый указатель this, который передается в качестве первого параметра функции.
Когда создается экземпляр объекта;
Номер 3 - причина почему конструкторы не могут вызывать виртуальные функции в производных классах (когда конструктор выполняется, vtable еще не «настроен»).
Вы можете получить тот же эффект, используя идиому письмо / конверт. См. Расширенные стили и идиомы программирования C ++ , чтобы узнать об этом и многом другом.