Здравствуйте, HolyNick, Вы писали:
HN>Хотя нет — не снимается.
Потому что вопреки досужим мнениям, язык с++ является статически строго типизированным. А это означает, что он на нем нельзя выполнять семантику присвоения теплого с мягким:
some val = 10;
Что здесь происходит?
Некоторые думают, что данный код эквивалентен:
some val(10);
Но это ошибочное мнение. Поскольку язык строго типизированный, то когда используется семантика присвоение (символ '='), в левой и в правой части должны находится идентичные типы данных.
Поэтому настоящий эквивалент кода выглядит так:
some val = some(10);
Компилятор пытается создать в правой части временный объект такого же типа, и только потом использовать семантику присвоения.
Окончательная версия эквивалента получается такой:
some val( some(10) );
При этом срабатывает стандартная NRVO-оптимизация, и мы не наблюдаем вызова конструктора копии. Даже в дебаге не наблюдаем.
Вообще согласно стандарту, вы не должны закладываться на наблюдаемость копирующих конструкторов, потому что они являются претендентами на оптимизацию.