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.cpp
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
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.
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
Merci pour vos commentaires !
single
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Awesome!
Completion rate improved to 5.56
Dé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
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
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.
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
Merci pour vos commentaires !
Awesome!
Completion rate improved to 5.56single