2) в данном случае будет вызываться не конструктор копирования, а оператор присваивания.
тут нужно быть по осторожнее т.к. теория может расходится с практикой (оптимизация компилятора)
ТыцКак пояснил
Rcus - это стандартная оптимизация практически для всех современных компиляторов.
C++ (Qt)
MyObject CreateObj( void ) // наглое возвращение объекта по значению
{
MyObject obj;
return obj;
}
...
MyObject theObj = CreateObj();
Здесь компилятор не позовет деструктор для локального obj, итого будет вызван всего 1 конструктор MyObj. Однако никакая оптимизация не заменяет конструирование на присваивание или наоборот, напр
C++ (Qt)
theObj = CreateObj(); // theObj был объявлен выше
А вот здесь как ни оптимизируй, а будет вызван оператор присваивания и деструктор
Кстати интересно проверить (для первого случая) - а что будет если конструктор копирования и по умолчанию чем-то различаются?
Edit; наверное правильнее сказать: в первом случае локальный obj вообще не создается, а сразу используется "место назначения" (theObj)