Contenu du cours
Pointeurs Intelligents C++
Pointeurs Intelligents C++
Dé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
#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
#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.
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
Merci pour vos commentaires !
Dé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
#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
#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.
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
Merci pour vos commentaires !