Извините, если раньше об этом спрашивали, но, как я понимаю, в C ++ 11 std::vector
имеет конструктор перемещения, так что копии в некоторых ситуациях стоят почти ничего, например, возвращая их по значению. Однако, если у меня есть такой класс, с 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
ничего не знает о конструкторах перемещения? Или будет вызван конструктор копирования vector
, и все эти тысячи (может быть, даже миллионы) int
должны быть скопированы одна за другой?