【发布时间】:2013-05-17 14:54:45
【问题描述】:
在我的类中,我使用std::vector 等作为成员变量,它们带有自己的移动构造函数。我没有为我的类显式声明移动构造函数,并且它们大部分都没有隐式声明。
如果我的类的隐式复制构造函数或隐式赋值运算符使用右值调用,具有移动构造函数的成员是复制还是移动?
如果它们被移动,在使用具有移动可构造成员的类时,是否有任何理由避免使用临时对象?
【问题讨论】:
-
如果使用 C++11,它们将被移动,如果使用 C++03,它们将被复制。从 C++11 开始,所有标准库容器类都将利用移动语义。
-
但是,如果我明确声明了一个复制构造函数,情况就不是这样了吗?据我所知,将 const 引用附加到右值然后分配内容将不允许使用成员的移动赋值运算符。
-
“它们大部分没有被隐式声明。” 那么你的类型没有移动语义,所以没有办法移动成员
标签: c++ c++11 move-semantics rvalue