Member 13261094 Ответов: 2

Адрес памяти объекта C++


Привет ,

Я новичок в c++, не могли бы вы помочь мне с нижеприведенным кодом.

CObject	*m_pRetObj1; 
CObject *m_pRetObj2;
m_pRetObj2 = m_pRetObj1;


Требование-m_pRetObj2 , должно иметь все значения m_pRetObj1 в новом адресном пространстве. на данный момент адресное пространство остается прежним... я хочу, чтобы адресное пространство было другим.

Пожалуйста, помогите мне в решении этого вопроса.

Что я уже пробовал:

Я попробовал CObject *m_pRetObj2(m_pRetObj1). но адресное пространство одно и то же.

2 Ответов

Рейтинг:
5

KarstenK

В двух словах: ваши переменные-это ТОЛЬКО указатель и НЕ реальный объект. Представьте их в виде значений адресов - и оба они адресуются одному и тому же объекту в вашем коде.

В вашем случае может помочь так называемая глубокая копия, когда ваш класс CObject реализовал ее. Используйте отладчик или напишите тест, чтобы проверить его.

m_pRetObj2 = new CObject(m_pRetObj1);
Вам нужно выучить язык более глубоко как с этим Изучите учебник по C++ .


Рейтинг:
2

OriginalGriff

Если вам нужны разные объекты, то вам нужно создать два разных экземпляра и скопировать данные.

На данный момент вы не создаете никаких экземпляров, поэтому ваш код все равно не будет работать: указатель будет либо содержать нулевые значения - и ваше приложение рухнет, когда вы попытаетесь их использовать, - либо они будут содержать случайные значения - и ваше приложение, вероятно, рухнет, когда вы попытаетесь их использовать!

Подумайте об этом как о машинах: "ваш автомобиль" - это переменная, которая идентифицирует автомобиль, которым вы владеете (или управляете) - вы можете выйти из Ford, сесть в Mercedes, и "ваш автомобиль" движется вместе с ним. Аналогично, "моя машина" - это переменная, которая содержит ту же информацию, но для меня, а не для вас. Поскольку мы не женаты, "ваша машина" и "моя машина" вряд ли будут содержать один и тот же автомобиль - но это может случиться.
Каждый автомобиль является экземпляром класса Vehicle и независим - вы создаете экземпляр (покупаете Ford) и устанавливаете переменную "ваш автомобиль" на этот новый автомобиль. Когда вы продаете его и покупаете Mercedes, Вы передаете экземпляр Ford новому владельцу и устанавливаете "свой автомобиль" на новый Mercedes. Эти два автомобиля независимы, поэтому вы не ожидаете найти мобильный телефон, который вы оставили в бардачке "Форда" в "Мерседесе"!

Объекты в C++ - это одно и то же: чтобы их использовать, нужно создать экземпляр. Вернитесь к своим последним двум конспектам лекций и перечитайте их снова - вы, кажется, еще недостаточно хорошо поняли, что происходит, чтобы двигаться дальше.
Ты его получишь!