Где хранится в памяти ссылка на текущий объект?

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

Но в объектно-ориентированном языке, таком как c ++, где компилятор хранит ссылку на текущий объект? object->instanceMethod() будет хранить указатель объекта как аргумент в стеке вызовов?

Я знаю, что вопрос универсален и спасибо за ответ

1

Решение

В C ++, когда вызывается функция-член, указатель на экземпляр, на котором она будет работать (т.е. что будет this внутри функции) неявно передается вместе с другими аргументами / параметрами функции. На самом деле, разные системы используют разные соглашения, поэтому некоторое количество таких параметров может быть упаковано в регистры и никогда не помещаться в стек (это, как правило, быстрее), но ваша концепция в основном правильная.

2

Другие решения

Это определяется реализацией, но на практике вы обнаружите, что большинство (все?) Компиляторов C ++ генерируют код, который передает this указатель как скрытый первый аргумент функции, так что вы можете получить к нему доступ без явного указания его в сигнатуре метода.

3

По вопросам рекламы [email protected]