Семантика перемещения с членом std :: vector

Извините, если об этом спрашивали раньше, но, насколько я понимаю, в C ++ 11 std :: vector имеет конструктор перемещения, поэтому в определенных ситуациях копии почти ничего не стоят, как возврат по значению. Однако, если у меня есть такой класс с вектором в качестве переменной-члена:

class MyClass {
public:
    MyClass() { }
    MyClass(const MyClass& rhs) { }

    // other interfaces

private:
    std::vector<int> myvec;

    // implementation
};

И есть функция, которая возвращает одно из них по значению, например

MyClass somefunc() {
    MyClass mc;
    // fill mc.myvec with thousands (maybe even millions) of ints
    return mc;
}

Будет ли перемещать конструктор mc.myvec и конструктор перемещения std :: vector был использован, хотя сам MyClass ничего не знает о конструкторах перемещения? Или будет вызван конструктор копирования вектора , и все эти тысячи (может быть, даже миллионы) int должны быть скопированы один за другим?

19
задан Seth Carnegie 24 November 2011 в 04:39
поделиться