5 votes

std::move sur un objet de la pile

Je sais que c'est une question très basique, probablement même embarrassante, mais j'ai du mal à comprendre ceci. Si je std::move de quelque chose sur la pile vers un autre objet, l'autre objet peut-il encore être utilisé lorsque l'original sort de la portée ?

#include <iostream>
#include <string>

int
main(int argc, char* argv[])
{
    std::string outer_scope;

    {
        std::string inner_scope = "candy";
        outer_scope = std::move(inner_scope);
    }

    std::cout << outer_scope << std::endl;

    return 0;
}

Est-ce que outer_scope est toujours valide là où j'essaie de l'imprimer ?

4voto

Julius Points 906

Oui, c'est toujours valable, l'objet innerscope perd la propriété du contenu qu'il avait précédemment, et outerscope en devient le propriétaire. std::move est comme un échange de vecteur. Si vous échangez outer et inner, la destruction de inner n'affectera pas le contenu qui appartient maintenant à outer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X