Для возврата unique_ptr не используйте перемещение

Проблема: снижение производительности

Не нужно использовать std::move при возврате std::unique_ptr и других некопируемых классов. Компилятор сам все сделает, да еще и с оптимизациями (RVO):

Неправильно:

std::unique_ptr<int> get_unique() {
    auto ptr = std::make_unique<CMyClass>();
    // do something

    return std::move(ptr); // Плохо
}

// Использование
auto int_uptr = get_unique();

Правильно:

std::unique_ptr<int> get_unique() {
    auto ptr = std::make_unique<CMyClass>();
    // do something

    return ptr; // Ok
}