source._myInt
указывает на 0x2511c20
до и после копирования. Это не меняет dest1._myInt
указывает на 0x2512050
до и после копирования. Эти два указателя не изменяются и не должны изменяться.
Данные, хранящиеся в этих ячейках памяти, копируются, но сами указатели не копируются.
Возможно, легче понять, если мы рисуем это для вас:
Сначала вы создаете объект source
:
DeepCopy source(42);
, который создает что-то вроде этого:
+---------------+ +----------------+
| source._myInt | --> | 42 @ 0x2511c20 |
+---------------+ +----------------+
Затем вы создаете dest1
object:
DeepCopy dest1(source);
Если мы шаг за шагом пройдемся по конструктору копирования, сначала у нас будет
_myInt = (int *)malloc(sizeof(int)); // line 1
Это приведет к
+--------------+ +----------------+
| dest1._myInt | --> | ?? @ 0x2512050 |
+--------------+ +----------------+
[Значение в этой точке неопределенное ]
Затем у вас есть копирование значения :
*_myInt = *source._myInt; // line 2
И теперь у вас есть
+--------------+ +----------------+
| dest1._myInt | --> | 42 @ 0x2512050 |
+--------------+ +----------------+
Наконец-то мы вернулись в функцию main
и у вас есть:
+---------------+ +----------------+
| source._myInt | --> | 42 @ 0x2511c20 |
+---------------+ +----------------+
+--------------+ +----------------+
| dest1._myInt | --> | 42 @ 0x2512050 |
+--------------+ +----------------+
У вас есть два разных объекта, каждый со своим отличным * Переменная _myInt
, каждая указывает на различные области памяти. Значение в этих местах оказывается одинаковым, но указатели на эти значения отличаются.