Недавно я увидел код на C++, похожий на этот
class MyClass {
public:
MyClass(std::unique_ptr< MyType > myValue)
: _myValue(std::move(myValue)) {}
std::unique_ptr< MyType > _myValue;
};
Это правильный способ инициализации unique_ptr? Разве явный std :: move не нужен?
Кроме того, если у вызывающей стороны есть именованная переменная unique_ptr, она также должна будет использовать MyClass mc{move(p)}; в качестве аргумента конструктора. Эта крошечная дополнительная многословность, на мой взгляд, хорошая вещь для использования unique_ptr.
Я бы изменил определение на: MyClass(std::unique_ptr< int >&& myValue)





Да, это правильно. Если вы удалите move, компилятор пожалуется, что в unique_ptr нет конструктора копирования, и откажется от вашего кода.
myValueне временный, поэтому требуетсяstd::move.