Je voudrais implémenter une méthode "take". Une méthode "take" est quelque chose comme une méthode get, mais qui vole l'objet getté de son propriétaire: le propriétaire est laissé avec cet objet dans un état vide. Bien sûr, cela implique la sémantique de déplacement C++ 11. Mais lequel de ce qui suit est le meilleur moyen de l'implémenter?Utiliser std :: move pour une implémentation de la méthode "take"
class B
{
public:
A take_a_1()
{
return std::move(m_a);
}
// this can be compiled but it looks weird to me that std::move
// does not complain that I'm passing a constant object
A take_a_2() const
{
return std::move(m_a);
}
A&& take_a_3()
{
return std::move(m_a);
}
// this can't be compiled (which is perfectly fine)
//
// A&& take_a_4() const
// {
// return std::move(m_a);
// }
private:
A m_a;
};
pourquoi voulez-vous le mettre à l'intérieur de B? – iggy
Pas tout à fait un doublon, je pense, mais voir aussi http://stackoverflow.com/q/29504070/1858225 –
Je suggère de renommer 'take' à' release' que ce nom est utilisé à des fins similaires dans les pointeurs intelligents : http://fr.cppreference.com/w/cpp/memory/unique_ptr/release –