c++11, utiliser le move constructeur ou un pointeur pour retourner une variable locale?
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:
Code:
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
} |
ou bien vaut il mieux toujours continuer avec l'utilisation de pointeurs?
Code:
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;
} |