Articles of move sémantics

renvoyer une chaîne d’une fonction

Je voulais écrire une fonction qui sera multi-plateforme (win32 et linux) et renvoyer une représentation sous forme de chaîne de la date / heure [hh: mm: ss jj-mm-aaaa]. Sachant que je veux juste utiliser la chaîne retournée comme temporaire dans un stream comme ci-dessous: std::cout << DateTime() << std::endl; J’ai envisagé d’écrire une fonction avec […]

Comment la sémantique de move fonctionne-t-elle avec unique_ptr?

J’essayais d’ utiliser unique_ptr et j’ai écrit du code simple pour vérifier son fonctionnement avec la sémantique de déplacement. #include #include using namespace std; class X { public: X(){} ~X() { cout << "Destructor X" << endl; } void Print() { cout << "X" << endl; } }; int main() { unique_ptr ptr(new X()); ptr->Print(); […]

Tableaux statiques VS. tableaux dynamics en C ++ 11

Je sais que c’est un très vieux débat qui a déjà fait l’object de nombreuses discussions dans le monde entier. Mais j’ai actuellement du mal à choisir la méthode à utiliser plutôt qu’une autre entre des tableaux statiques et dynamics dans un cas particulier. En fait, je n’aurais pas utilisé C ++ 11, j’aurais utilisé […]

L’affectation de mouvement via destruct + move construct est-elle sécurisée?

Voici un moyen très simple de définir une affectation de déplacement pour la plupart des classes avec un constructeur de déplacement: class Foo { public: Foo(Foo&& foo); // you still have to write this one Foo& operator=(Foo&& foo) { if (this != &foo) { // avoid destructing the only copy this->~Foo(); // call your own […]

Déplacer constructeur / opérateur =

J’essaie d’apprendre la nouvelle fonctionnalité du C ++, à savoir le constructeur de déplacements et l’affectation X::operator=(X&&) . J’ai trouvé un exemple intéressant, mais la seule chose que je ne comprends même pas, mais qui ne soit pas du même avis, est une ligne dans l’opérateur de déplacement et d’assignation. (marqué dans le code ci-dessous): […]

Devrait-on utiliser unique_ptr pour implémenter plus facilement la sémantique «move»?

Edit: rendu Foo and Bar un peu moins sortingvial, et le remplacement direct par shared_ptr plus difficile. unique_ptr être utilisé comme un moyen plus simple d’implémenter la sémantique de déplacement? Pour un cours comme class Foo { int* m_pInts; bool usedNew; // other members … public: Foo(size_t num, bool useNew=true) : usedNew(useNew) { if (usedNew) […]

Est-ce que std :: move est sécurisé dans une liste d’arguments lorsque l’argument est transféré, pas de déplacement construit?

Essayer de fournir une solution à std :: ssortingng_view et std :: ssortingng dans std :: unordered_set , je m’amuse à remplacer std::unordered_set avec std::unordered_map<std::string_view, std::unique_ptr> (la valeur est std::unique_ptr car l’optimisation de la petite chaîne signifie que l’adresse des données sous-jacentes de la ssortingng ne sera pas toujours transférée à la suite de std::move […]

Implémentation du constructeur de déplacement en appelant l’opérateur de l’affectation de déplacement

L’article de MSDN, Comment: écrire un Move Constuctor , contient la recommandation suivante. Si vous fournissez à la fois un constructeur de déplacement et un opérateur d’affectation de déplacement pour votre classe, vous pouvez éliminer le code redondant en écrivant le constructeur de déplacement pour appeler l’opérateur d’affectation de déplacement. L’exemple suivant montre une version […]

Retour de std :: move (f) dans std :: for_each

J’écris une implémentation de la bibliothèque standard c ++ pour étude. La norme C ++ 11 dit que for_each renvoie std::move(f) . template Function for_each(InputIterator first, InputIterator last, Function f); Returns: std::move(f). Je pensais que la variable locale de scope de la fonction est construite par déplacement lorsqu’elle est renvoyée. Dois-je retourner move(f) explicitement?

Les parameters de valeur sont-ils implicitement déplacés lorsqu’ils sont renvoyés par valeur?

Considérons la fonction suivante: Foo foo(Foo x) { return x; } Est-ce que return x appellera le constructeur de copie ou le constructeur de déménagement? (Laissons NRVO de côté ici.) Pour enquêter, j’ai écrit un simple cours de Foo qui ne peut être déplacé mais pas copié: struct Foo { Foo() = default; Foo(const Foo&) […]