Si j'ai bien compris std::move et les rvalue références introduites dans c++11, le but est d'éviter des copies quand on peut récupérer directement les données d'un objet temporaire.
Je me demande quand est il judicieux de l'utiliser? Par example sachant que std::vector a un move constructor, doit-on/ peut-on retourner une variable locale au lieu d'un pointeur?
Voci mon example. Est ce que ceci est acceptable:
ou bien vaut il mieux toujours continuer avec l'utilisation de pointeurs?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 bool compPairsByValue(const std::pair<ushort,ushort>& lhs, const std::pair<ushort,ushort>& rhs) { return lhs.second < rhs.second; } std::map<int,int> myMap; ... std::vector<pair<int,int> > getOrderedMapVector(){ std::vector<pair<int,int> > vect(myMap.cbegin(), myMap.cend()); std::sort(vect.begin(), vect.end(), compPairsByValue); return vect; } { std::vector<pair<int,int> > vect = getOrderedMapVector(); // ... utilisation du vecteur }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 std::vector<pair<int,int> > * getOrderedMapVectorP(){ std::vector<pair<int,int> > *vect = new std::vector<pair<int,int> >(myMap.cbegin(), myMap.cend()); std::sort(vect->begin(), vect->end(), compPairsByValue); return vect; } { std::vector<pair<int,int> > *vect = getOrderedMapVectorP(); // ... utilisation du vecteur delete vect; }
Partager