抱歉,如果之前有人问过这个问题,但据我了解,在 C++11 中,std::vector
有一个移动构造函数,因此在某些情况下,副本几乎不会花费任何成本,比如按值返回一个。但是,如果我有一个像这样的类,将 avector
作为成员变量:
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
是否会调用移动构造函数并利用移动构造函数?还是会调用 的复制构造函数,而所有成千上万(甚至可能是数百万)的s 都必须一个一个复制?std::vector
MyClass
vector
int