ムーブ セマンティクスを試してみようと思いました。そのため、Scott Meyers が移動セマンティクスについて話している非常に粗い/低解像度のビデオを見つけましたが、そのビデオのコードは判読できませんでした。
そこで、文字列のベクトルをラップする使い捨てクラスを作成しました。
class ShoppingList
{
private:
vector<string> m_vsList;
public:
...
};
移動セマンティクスを使用して、文字列の一時的なベクトルをメンバー変数 m_vsList に移動できるかどうか疑問に思っていましたか?
これを実現するには、次のような移動関数を記述します。
void MoveList( vector<string> && r )
{
m_vsList = std::move(r);
}
VS2011 ベータ コンパイラでこれを試していることを述べておく必要があります。
質問
これは正しい/可能ですか? もしそうなら、どうすれば一時的に指定できますvector<string>
か?
たとえばMoveList( {string("c"), string("b"), string("a")} )
無効です。
ムーブ セマンティクスをムーブ コンストラクターやムーブ割り当てオーバーロードに制限する必要がありますか?
std::m_vsList に移動し、m_vsList に既にデータが含まれている場合、そのデータはどうなりますか? では、移動する前にそのベクトルを明示的にクリアする必要がありますか?