vendredi 3 juillet 2015

C++: std::move with rvalue reference is not moving contents

Sample program:

#include <iostream>
#include <string>
#include <vector>

template <typename T>
void print(const T& _vec)
    {        
        for( auto c: _vec )
            std::cout << c << ",";
    }

typedef std::vector<std::string> vecstr_t;

struct Trade
{
    explicit Trade(vecstr_t&& vec) : _vec(vec )
    {       
    }  

     vecstr_t _vec;
};


int main()
{   
    vecstr_t tmpV = {"ONE", "TWO", "THREE", "FOUR"};    
    std::cout << "size 1:" << tmpV.size() << "\t"; print(tmpV); std::cout <<  "\n" ;    
    Trade t(std::move(tmpV));    
    std::cout << "size 2:" << tmpV.size() << "\t";  print(tmpV); std::cout <<  "\n" ; // expted tmpV should be e,pty but it has original contents    
    print(t._vec);    
}

I expect size 2: should be ZERO but output is:

size 1:4 ONE,TWO,THREE,FOUR,

size 2:4 ONE,TWO,THREE,FOUR,

ONE,TWO,THREE,FOUR,

Aucun commentaire:

Enregistrer un commentaire