Могу ли я записать конструктор копирования через оператор присваивания?
Например вот так:
A::A(const A * a) {
*this = a;
}
A &A::operator=(const A * a) {
delete str;
str = new char[strlen(a->str)+1];
strcpy(str, a->str);
return *this;
}
Еще хочется уточнить, правильно ли если я делаю A * a в примере выше, потому примеры с разных сайтов A & a. C этого всплывает вопрос, что должен возвращать оператор присваивание:
A &A::operator=(const A * a)
или
A * A::operator=(const A * a)
Вообщем правильный ли мой код выше?
Объект класса создается так A * a = new A();
Ответ
Конструктор копирования можно написать через оператор присваивания, не вопрос. Только то, что вы пишете — это не конструктор копирования и не оператор присваивания. Для них аргументом является экземпляр класса, а не указатель на него. Код неправильный ещё и по другой причине: вы не учитываете случай копирования объекта в себя Сигнатура конструктора копирования обязана быть A(A& a) или A(const A& a) (есть ещё немного экзотических возможностей, вот документация), всё остальное, в частности, то, что у вас — не конструктор копирования. Сигнатура оператора копирующего присваивания (а начиная с C++11 возможен и перемещающий) обязана быть A& operator= (A a) или A& operator= (const A& a) (документация), всё остальное — не оператор копирующего присваивания. В частности, у вас просто конструктор из стороннего типа, и оператор присваивания значения стороннего типа. Указатель на A для A — сторонний тип.
Комментариев нет:
Отправить комментарий