1) При присвоении «& ref», что происходит внутри с точки зрения памяти? Это просто назначение адреса памяти "ptrFoo" для "ref"?
Это зависит от вашей платформы, настроек компилятора и компилятора. Ваш компилятор может просто создать синоним для разыменования. Поскольку ссылка не может быть переопределена, нет причины, по которой компилятору действительно нужно выделять какую-либо память для переменной.
2) Что происходит при присвоении "afoo"? Это вызывает copy-constructor? Это означает, что память выделяется для двух объектов Foo? то есть "afoo" и ранее назначенная память для "ptrFoo"?
Да, содержимое Foo
, хранящееся в динамическом хранилище, копируется (с помощью конструктора копирования) в экземпляр Foo
в автоматическом хранилище. Здесь нет динамического распределения; aFoo
экземпляр будет создан так же просто, если бы не было назначения. Например, Foo aFoo;
.
3) Скажем, у меня есть метод под названием "void methodBar (const Foo & instance)", если я передам "ptrFoo" как:
methodBar ((* preFoo));
что здесь значат слова "const"?
const
в этой позиции означает, что хотя элемент передается по ссылке, метод, который объявил эту ссылку const
, не может изменять экземпляр ссылочной ссылки.