Сейчас я изучаю ctors и задаю несколько вопросов. На этих линиях:Создание и создание объекта C++
Foo obj(args);
Foo obj2;
obj = Foo(args);
Foo obj3 = Foo(args);
Первая часть: только один конструктор называется (Foo) и obj
инициализируется. Итак, создание одного объекта.
Вторая часть: создание временного объекта obj2
, вызывающего по умолчанию для него. В последующих строках мы создаем еще одну копию Foo
и передаем ее копию в operator=()
. Это правильно? Итак, 3 локальных временных объекта, 2 вызова конструктора.
Третья часть: создать 1 объект Foo
и передать его копию в operator=()
. Итак, 2 темпоральных объекта и 1 вызов ctor.
Насколько я понимаю это право? И если это правда, будет ли компилятор (последний gcc, например) оптимизировать их в обычных случаях?
'operator =()' обычно получает свой аргумент по ссылке, поэтому никаких копий при его вызове. – rodrigo
obj3 фактически создан с использованием оператора копирования без назначения оператора. –