我想我可以试试移动语义。因此,我捕捉到了 Scott Meyers 谈论移动语义的非常粗糙/低分辨率的视频,尽管所述视频中的代码不可读。
所以我写了一个包装字符串向量的丢弃类。
class ShoppingList
{
private:
vector<string> m_vsList;
public:
...
};
我想知道是否可以使用移动语义将字符串的临时向量移动到成员变量 m_vsList 中?
为此,我可能会编写一个移动函数,例如:
void MoveList( vector<string> && r )
{
m_vsList = std::move(r);
}
我应该声明我正在 VS2011 beta 编译器上尝试这个。
问题
这是正确的/可能的吗?如果是这样,我该如何指定一个临时的vector<string>
?
例如MoveList( {string("c"), string("b"), string("a")} )
无效。
我应该限制移动语义来移动构造函数和/或移动赋值重载吗?
如果我 std::move 进入 m_vsList 并且 m_vsList 已经包含数据,那么该数据会发生什么,它会泄漏吗?那么我应该在移动之前明确清除该向量吗?