Является ли запись std :: move избыточной, когда существует конструктор перемещения копии или оператор присваивания? - PullRequest
0 голосов
/ 29 апреля 2019

Компилятор C ++ 11 автоматически знает, когда использовать перемещение и когда использовать обычное назначение. Если в приложении уже определены как обычные операторы присваивания, так и операторы присваивания перемещения, имеет ли смысл / различие явно писать std :: move.

Класс CMyVehicleList имеет функции перемещения и обычного копирования и назначения

class CMyVehicleList
{
   public :
      CMyVehicleList() {// some code}
      CMyVehicleList(const CMyVehicleList& rhs) {// some code}  
      CMyVehicleList(CMyVehicleList&& rhs) {// some code}
      CMyVehicleList operator = (const CMyVehicleList& rhs) {// some code}
      CMyVehicleList operator = (CMyVehicleList&& rhs) {// some code}
};

Глобальная функция возвращает объект CMyVehicleList в зависимости от владельца, переданного функции.

MyVehicleList GetVehicleLists(const string& owner)
{
    MyVehicleList Temp;
    if (owner == "mark")
    {
       // pupulate MyVehicleList with marks details...
    }
    else if (owner == "daniel")
    {
       // pupulate MyVehicleList with daniel details...
    }
    return Temp
}

В данном сценарии, в чем разница между двумя вызовами

MyVenicalList userlist;

userlist = GetVehicleList("mark");
userlist = std::move(GetVehicleList("mark"));
...