0

私は右辺値参照について学んでおり、私の脳はおそらくいたるところにあります。しかし、std::move と右辺値の参照をテストしたかったので、以下にコード スニペットを示します。

string s1 = "hello";
{
    string&& s2 = std::move(s1);
    cout << s2 << endl;
}

cout << s1 << endl;

出力はどちらの場合も同じです。"こんにちは"

s2 を作成するときにブロック内で移動代入演算子を呼び出して、s1 が何も指していないことを確認することを望んでいましたが、それは起こりませんでした。

私の理論的根拠は、文字列がその中に char へのポインターを持っているため、移動ポインターが呼び出されると、メモリ割り当てが移動します。したがって、s1 から s2 に移動すると、s1 を印刷すると問題が発生するはずです。

私の理解で何が間違っていましたか。

4

2 に答える 2