Извините, если об этом спрашивали раньше, но, насколько я понимаю, в 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
должны быть скопированы один за другим?