Чем отличается конструктор копирования от перегрузки оператора = ?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 24.05.18 06:25
Оценка: -3
Чем отличается конструктор копирования от перегрузки оператора = (перегрузки оператора равно)?
1613 г. = 2024 г.
Re: Чем отличается конструктор копирования от перегрузки оператора = ?
От: Dair Россия https://dair.spb.ru
Дата: 24.05.18 07:49
Оценка: +2
Здравствуйте, RussianFellow, Вы писали:

RF>Чем отличается конструктор копирования от перегрузки оператора = (перегрузки оператора равно)?


Разной ситуацией вызовов.

Конструктор (как можно понять из названия) вызывается для объекта один раз, при его, объекта, создании.
Оператор присваивания может быть вызван для объекта любое число раз.

Конструктор, как и все другие конструкторы, ничего сам не возвращает.
Оператор присваивания обязан вернуть ссылку на присвоенный объект для возможного дальнейшего присваивания.
Re: Чем отличается конструктор копирования от перегрузки оператора = ?
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 24.05.18 11:22
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Чем отличается конструктор копирования от перегрузки оператора = (перегрузки оператора равно)?

Ты концепутальном смысле ищешь различия или контекстуальном?
Sic luceat lux!
Re[2]: Чем отличается конструктор копирования от перегрузки оператора = ?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 24.05.18 12:48
Оценка:
Здравствуйте, Kernan, Вы писали:

K>Здравствуйте, RussianFellow, Вы писали:


RF>>Чем отличается конструктор копирования от перегрузки оператора = (перегрузки оператора равно)?

K>Ты концепутальном смысле ищешь различия или контекстуальном?

И в том, и в другом смысле.
1613 г. = 2024 г.
Re[3]: Чем отличается конструктор копирования от перегрузки оператора = ?
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 24.05.18 13:18
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Здравствуйте, Kernan, Вы писали:


K>>Здравствуйте, RussianFellow, Вы писали:


RF>>>Чем отличается конструктор копирования от перегрузки оператора = (перегрузки оператора равно)?

K>>Ты концепутальном смысле ищешь различия или контекстуальном?

RF>И в том, и в другом смысле.

К концепутальном — ничем, в контекстуальм — Даир объяснил.
Sic luceat lux!
Re: Чем отличается конструктор копирования от перегрузки оператора = ?
От: sergii.p  
Дата: 24.05.18 14:13
Оценка: +1
Здравствуйте, RussianFellow, Вы писали:

RF>Чем отличается конструктор копирования от перегрузки оператора = (перегрузки оператора равно)?


конструктор копирования конструирует объект. То есть до его вызова объекта ещё не существовало и никакие действия по очистке не требуются.
Оператор присваивания вызывается тогда, когда объект уже создан. Следовательно надо вызвать сперва очистку.

class A
{
    private:
        int* pointer;
    public:
        A(int value) {pointer = new int(value); }
        ~A(){ delete pointer; }
        A(const A& a)
        { pointer = new int(*a.pointer); }
        A& operator=(const A& a)
        { if(this != &a) { delete pointer; pointer = new int(*a.pointer); } return *this; }
};

int main()
{
    A a1(1);
    A a2(a1); // конструктор копирования
    a2 = a2; // оператор присваивания того же самого объекта
    a2 = A(2); // оператор присваивания 
    return 0;
}
Re[2]: Чем отличается конструктор копирования от перегрузки оператора = ?
От: B0FEE664  
Дата: 24.05.18 20:03
Оценка: +1
Здравствуйте, Dair, Вы писали:

D>Оператор присваивания обязан вернуть ссылку на присвоенный объект для возможного дальнейшего присваивания.


Оператор присваивания обязан вернуть ссылку? Откуда это следует?
И каждый день — без права на ошибку...
Re[3]: Чем отличается конструктор копирования от перегрузки оператора = ?
От: Dair Россия https://dair.spb.ru
Дата: 24.05.18 21:01
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:

D>>Оператор присваивания обязан вернуть ссылку на присвоенный объект для возможного дальнейшего присваивания.

BFE>Оператор присваивания обязан вернуть ссылку? Откуда это следует?

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

Но я так не делал и вам не советую.

https://en.cppreference.com/w/cpp/language/copy_assignment
Re: Чем отличается конструктор копирования от перегрузки оператора = ?
От: Тёмчик Австралия жж
Дата: 25.05.18 00:36
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Чем отличается конструктор копирования от перегрузки оператора = (перегрузки оператора равно)?


http://www.cplusplus.com/articles/y8hv0pDG/

Пишут, что если перегрузил конструктор копирования, то надо перегружать присваивание и при том особым православным методом. Shoot in the leg как он есть.
Re[2]: Чем отличается конструктор копирования от перегрузки оператора = ?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 25.05.18 06:36
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Пишут, что если перегрузил конструктор копирования, то надо перегружать присваивание и при том особым православным методом. Shoot in the leg как он есть.


Просьба не оскорблять мою религию.
1613 г. = 2024 г.
Re: Чем отличается конструктор копирования от перегрузки оператора = ?
От: MasterZiv СССР  
Дата: 25.05.18 10:12
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Чем отличается конструктор копирования от перегрузки оператора = (перегрузки оператора равно)?


Один конструктор, другой -- оператор. семантика разная. операции разные.
Одинаково только то, что оба копируют содержимое объекта из одного объекта в другой.
Но даже это (семантика этого копирования) может быть разным.
Re[3]: Чем отличается конструктор копирования от перегрузки оператора = ?
От: Кодт Россия  
Дата: 25.05.18 13:58
Оценка:
Здравствуйте, RussianFellow, Вы писали:

Тё>>Пишут, что если перегрузил конструктор копирования, то надо перегружать присваивание и при том особым православным методом. Shoot in the leg как он есть.


RF>Просьба не оскорблять мою религию.


Наоборот же. Используется как синоним чего-то особенно правильного и единственно верного. А в данном случае — как последнего шанса (в противном случае — пистолет уже заряжен и приближается к ноге, молись и кайся).
Перекуём баги на фичи!
Re: Чем отличается конструктор копирования от перегрузки оператора = ?
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 06.06.18 01:49
Оценка: :)))
RF> Чем отличается конструктор копирования от перегрузки оператора = (перегрузки оператора равно)?

Надо бы побольше контекста. Почему у тебя возник такой вопрос? Ты проектируешь свой компилятор и размышляешь над тем какие проектные решения принять?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.