Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

C++11のmove()でvectorの所有権を移動すると、元のvectorの要素数は0になる

いまいちC++11のmove()の動作が覚えられないので、動作サンプルを書き溜めて覚えたい。

// 検証環境: OSX 10.10.3 Xcode6.3.2 GNU++11
#include <utility> // move()
#include <vector>
using namespace std;

struct JOB {
    int reward;
};

vector<JOB> get_job(void)
{
    vector<JOB> v_job;
    for( int i = 0; i < 10; ++i ){
        JOB job;
        job.reward = i;
        v_job.push_back( job );
    }
    return v_job;
}

int main(int argc, const char * argv[])
{
    {
        // vector全体の所有権を移動
        vector<JOB> v1 = get_job();
        printf( "v1.size()[%ld]\n", v1.size() );    // v1.size()[10]
        vector<JOB> v2 = move(v1);
        printf( "v1.size()[%ld]\n", v1.size() );    // v1.size()[0]
        printf( "v2.size()[%ld]\n", v2.size() );    // v2.size()[10]
    }
    {
        // vectorのfront()一つの所有権を移動
        vector<JOB> v1 = get_job();
        printf( "v1.size()[%ld]\n", v1.size() );    // v1.size()[10]
        JOB job = move(v1.front());
        printf( "v1.size()[%ld]\n", v1.size() );    // v1.size()[10]
    }
    return 0;
}