2

簡単な例 (以下) を使用して std::move の方法を理解しようとしています。基本的には p1 から p2 の内容に移動しようとしているので、その後 p1 は空になりますが、これは起こりません。

std::move を正しく使用していないと思います。誰かが私にそれを説明できれば、とても感謝しています。

#include <iostream>
#include <utility>

int main()
{
    int * p1 = new int[10];
    for(int i = 0; i < 10; ++i)
        p1[i]=i;
    // moving contents of p1 to p2  
    int * p2 = std::move(p1);   
    // I was expeting p1 now to be empty but it's not...
    if(p1 != NULL)
        std::cout << "I'M NOT EMPTY\n";
    // prints I'M NOT EMPTY     
}
4

3 に答える 3

1

多分これ
はなぜポインター変数を移動してもnullに設定されないのですか? コードで何が起こっているかを明確にすることができます。riv が指摘したように、 std::move NULL をポインターに割り当てる理由はありません。

このリファレンスhttp://en.cppreference.com/w/cpp/utility/moveには、std::move を使用した場合の未定義の動作の良い例があります。

于 2013-12-19T01:38:39.643 に答える