Я преподаю С++ студентам пару лет и неизменно вижу круглые непонимающие глаза когда я рассказываю о копировании, о том, что тут передача по значению, тут по ссылке, а тут вообще по константной ссылке. Когда же после этого речь заходит про перемещение, то у части эмоционально нестойких начинается нервный тик. Итак мои тезисы: копирование и перемещение неоправданно сложны, не интуитивны, приводят к снижению быстродействия и ошибкам. Передача объектов по ссылке на объект всегда достаточна.
Основные случаи где это надо:
1. Получить копию. Но явное лучше неявного, поэтому метод clone гораздо лучше. Да, уже не напишешь bigint или комплексное число с которым удобно работать как с примитивными типами, но почему эти типы просто не сделать частью языка?
2. Умные указатели. Должны быть частью языка и все будет ок.
Обоснуйте почему копирование и перемещение это не WTF, а классно, чтобы я смог студенту обосновать, что все сделано правильно.