> Вообще-то в операторе копирующего присваивания сначала удаляются текущие
> ресурсы класса (т.к. присваиваем "живому" объекту, имеющему выделенные
> ресурсы). Конструктор же оперирует с "мёртвым объектом", когда ресурсы
> никакие не выделены! Поэтому правильно написанный оператор копирующего
> присваивания попытается удалить ресурсы, которых у класса попросту нет!
У Страуструпа про это хорошо написано, раздел 10.4.4.1:
"Как это и бывает в большинстве случаев, копирующий конструктор и
копирующее присваивание значительно отличаются. Основная причина этого
состоит в том, что копирующий конструктор инициализирует "чистую"
(неинициализированную) память, в то время как копирующий оператор
присваивания должен правильно работать с уже созданным объектом."
(iliks: т.е. схема действий копирующего конструктора:
1. выделить новые ресурсы (память, ...)
2. скопировать члены переданного объекта.
схема действий оператора присваивания:
1. проверить, не присваиваем ли самому себе.
2. если нет, то удалить _текущее_внутреннее_представление_ (если оно
требует удаления или абстрактного "освобождения")
3. выделить новые ресурсы.
4. скопировать члены переданного объекта.
Как видим, в общем случае никак не возможно из копирующего конструктора
вызвать оператор присваивания, потому что семантика действий совсем разная.
Posted via RSDN NNTP Server 1.9