В приложении к ответу JaredPar
1-обычный ctor, второй-подобный функции-ctor с временным объектом.
Скомпилируйте этот источник где-нибудь здесь http://melpon.org/wandbox/ с разными компиляторами
#include <stdio.h>
class Thing {
public:
Thing(const char*){puts(__FUNCTION__ );}
Thing(const Thing&){puts(__FUNCTION__ );}
~Thing(){puts(__FUNCTION__);}
};
int main(int , const char** ) {
Thing myThing = Thing("asdf");
}
И вы увидите результат.
Из ISO / IEC 14882 2003-10-15
8.5, часть 12
Ваша 1-я, 2-я конструкция называется прямой инициализацией
12.1, часть 13
Преобразование типа функциональной записи (5.2.3) может использоваться для создания новых объектов этого типа. [Примечание: синтаксис выглядит как явный вызов конструктора. ] ... Созданный таким образом объект не имеет имени. [Примечание: 12.2 описывает время жизни временных объектов. ] [Примечание: явные вызовы конструктора не дают значений l, см. 3.10. ]
Где почитать про РВО:
12 Специальные функции-члены / 12.8 Копирование объектов класса / Часть 15
При соблюдении определенных критериев реализации разрешается опускать создание копии объекта класса, даже если конструктор копирования и / или деструктор для объекта имеют побочные эффекты .
Отключите его с помощью флага компилятора из комментария, чтобы просмотреть такое поведение копирования)