У меня есть следующая функция:
SomeClass func()
{
SomeClass someObject;
someObject.mutate("some text");
return someObject;
}
и следующие два случая:
1
int main()
{
func();
return 0;
}
2
int main()
{
SomeClass someObject = func();
return 0;
}
У меня отключено NRVO, исключение копирования / перемещения не происходит.
В обоих случаях у меня один и тот же вывод:
"default constructor"
"move constructor"
Почему конструктор перемещения вызывается только один раз в случае 2?Я ожидал, что он будет вызван один раз для возвращаемого значения функции, а второй - для инициализации переменной someObject.
ОБНОВЛЕНИЕ: Для большей ясности: вывод предназначен для отладочной сборки.Для сборки релиза у меня есть только «конструктор по умолчанию», и это кажется мне понятным из-за возможности копирования / перемещения.Я хочу понять другой вывод для отладочной сборки.