Как копировать объект?
Есть к примеру класс:
myClass
{
public:
int Value;
};
в программе создаю объект:
myClass * ptr = new myClass;
ptr->Value=10;
myClass * ptr2 = new myClass;
как скопировать ptr в ptr2,
т.е получить тотже результат что дает метод Assign()?
За ранее спасибо.
Подскажите как сделать сабж.
Есть к примеру класс:
myClass
{
public:
int Value;
};
в программе создаю объект:
myClass * ptr = new myClass;
ptr->Value=10;
myClass * ptr2 = new myClass;
как скопировать ptr в ptr2,
т.е получить тотже результат что дает метод Assign()?
За ранее спасибо.
Вопрос не понятен.
Ты хочешь скопировать значение одного указателя в другой? Тогда так: ptr2 = ptr. Только учти, что не уничтожив предварительно объект на который указывает ptr2, получишь утечку памяти.
Если ты хочешь скопировать содержимое объектов на которые указывают эти указатели (в этом случае ты неправильно задаешь вопрос, т.к. ptr и ptr2- это всего-лишь указатели, а не объекты), то есть смысл создать оператор присваивания и конструктор копирования:
{
public:
int Value;
myClass() {} // Конструктор без параметров
myClass(myClass& obj) // Конструктор копирования
{
Value = obj.Value;
}
myClass& operator =(myClass& obj) // Оператор присваивания
{
Value = obj.Value;
return *this;
}
};
Т.о. можно создавать объекты и инициализировать их с помощью конструктора копирования так:
myClass* ptr2 = new myClass(*ptr);
так:
myClass obj2(*ptr);
или так:
myClass obj2 = *ptr;
А так же использовать операцию присваивания так:
*ptr2 = *ptr;
В принципе для простых классов можно и не создавать конструктор копирования и оператор присваивания, а воспользоваться дефолтными, но есть вероятность наступить в последствии на грабли.
Вопрос не понятен.
Ты хочешь скопировать значение одного указателя в другой? Тогда так: ptr2 = ptr. Только учти, что не уничтожив предварительно объект на который указывает ptr2, получишь утечку памяти.
Если ты хочешь скопировать содержимое объектов на которые указывают эти указатели (в этом случае ты неправильно задаешь вопрос, т.к. ptr и ptr2- это всего-лишь указатели, а не объекты), то есть смысл создать оператор присваивания и конструктор копирования:
{
public:
int Value;
myClass() {} // Конструктор без параметров
myClass(myClass& obj) // Конструктор копирования
{
Value = obj.Value;
}
myClass& operator =(myClass& obj) // Оператор присваивания
{
Value = obj.Value;
return *this;
}
};
Т.о. можно создавать объекты и инициализировать их с помощью конструктора копирования так:
myClass* ptr2 = new myClass(*ptr);
так:
myClass obj2(*ptr);
или так:
myClass obj2 = *ptr;
А так же использовать операцию присваивания так:
*ptr2 = *ptr;
В принципе для простых классов можно и не создавать конструктор копирования и оператор присваивания, а воспользоваться дефолтными, но есть вероятность наступить в последствии на грабли.
спасибо за ответ.
Подразумевалось именно копирование содержимого объектов. В общем ответ рещил все вопроссы, спасибо!
myClass& operator =(myClass& obj) // Оператор присваивания
{
Value = obj.Value;
return *this;
}
};
А проверку на присвоение самому себе?
В принципе для простых классов можно и не создавать конструктор копирования и оператор присваивания, а воспользоваться дефолтными, но есть вероятность наступить в последствии на грабли.
Если в классе есть члены-данные указатели, то надо...(это и есть грабли).
А проверку на присвоение самому себе?
Согласен.
Но в данном случае и без проверки будет работать.