Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Déplacement des Pointeurs Uniques | Pointeurs Uniques
Pointeurs Intelligents C++

bookDéplacement des Pointeurs Uniques

Copie non autorisée

Un std::unique_ptr est un pointeur intelligent qui gère un objet alloué dynamiquement et assure sa suppression correcte lorsqu'il sort de la portée. Il a la propriété exclusive de l'objet qu'il gère, ce qui signifie qu'aucun deux std::unique_ptr ne peuvent posséder le même objet simultanément.

main.cpp

main.cpp

copy
123456789
#include <iostream> #include <memory> int main() { std::unique_ptr<int> first_unique_pointer = std::make_unique<int>(42); // This will cause a compilation error: copying is not allowed std::unique_ptr<int> second_unique_pointer = first_unique_pointer; }

Déplacement d'un pointeur unique

Bien que la copie ne soit pas autorisée, vous pouvez transférer la propriété de l'objet en utilisant std::move. Cela déplace la ressource d'un std::unique_ptr à un autre, laissant le pointeur original vide.

main.cpp

main.cpp

copy
123456789101112131415
#include <iostream> #include <memory> int main() { std::unique_ptr<int> first_unique_pointer = std::make_unique<int>(42); // Transferring ownership using std::move std::unique_ptr<int> second_unique_pointer = std::move(first_unique_pointer); if (!first_unique_pointer) std::cout << "first_unique_pointer is now empty.\n"; std::cout << "second_unique_pointer owns the value: " << *second_unique_pointer << '\n'; }

Lorsque vous utilisez std::move, la propriété de l'objet est transférée d'un pointeur unique à un autre. Après cela, le pointeur d'origine ne possède plus l'objet, et le nouveau pointeur en devient le propriétaire.

Tâche

Swipe to start coding

Complétez le code suivant de manière à ce que la propriété de l'entier alloué dynamiquement (avec la valeur 42) soit transférée en toute sécurité de ptr1 à ptr2.

Solution

solution.cpp

solution.cpp

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 2
single

single

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

Can you give an example of how to use std::move with std::unique_ptr?

What happens if I try to use the original unique_ptr after moving it?

Why is copying not allowed for std::unique_ptr?

close

Awesome!

Completion rate improved to 5.56

bookDéplacement des Pointeurs Uniques

Glissez pour afficher le menu

Copie non autorisée

Un std::unique_ptr est un pointeur intelligent qui gère un objet alloué dynamiquement et assure sa suppression correcte lorsqu'il sort de la portée. Il a la propriété exclusive de l'objet qu'il gère, ce qui signifie qu'aucun deux std::unique_ptr ne peuvent posséder le même objet simultanément.

main.cpp

main.cpp

copy
123456789
#include <iostream> #include <memory> int main() { std::unique_ptr<int> first_unique_pointer = std::make_unique<int>(42); // This will cause a compilation error: copying is not allowed std::unique_ptr<int> second_unique_pointer = first_unique_pointer; }

Déplacement d'un pointeur unique

Bien que la copie ne soit pas autorisée, vous pouvez transférer la propriété de l'objet en utilisant std::move. Cela déplace la ressource d'un std::unique_ptr à un autre, laissant le pointeur original vide.

main.cpp

main.cpp

copy
123456789101112131415
#include <iostream> #include <memory> int main() { std::unique_ptr<int> first_unique_pointer = std::make_unique<int>(42); // Transferring ownership using std::move std::unique_ptr<int> second_unique_pointer = std::move(first_unique_pointer); if (!first_unique_pointer) std::cout << "first_unique_pointer is now empty.\n"; std::cout << "second_unique_pointer owns the value: " << *second_unique_pointer << '\n'; }

Lorsque vous utilisez std::move, la propriété de l'objet est transférée d'un pointeur unique à un autre. Après cela, le pointeur d'origine ne possède plus l'objet, et le nouveau pointeur en devient le propriétaire.

Tâche

Swipe to start coding

Complétez le code suivant de manière à ce que la propriété de l'entier alloué dynamiquement (avec la valeur 42) soit transférée en toute sécurité de ptr1 à ptr2.

Solution

solution.cpp

solution.cpp

Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 2
single

single

some-alt