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