Conteúdo do Curso
C++ Smart Pointers
C++ Smart Pointers
Movendo Ponteiros Únicos
Cópia Não Permitida
Um std::unique_ptr
é um ponteiro inteligente que gerencia um objeto alocado dinamicamente e garante sua devida exclusão quando sai do escopo. Ele tem posse exclusiva do objeto que gerencia, o que significa que nenhum dois std::unique_ptr
podem possuir o mesmo objeto simultaneamente.
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; }
Movendo um Ponteiro Único
Embora a cópia não seja permitida, você pode transferir a posse do objeto usando std::move
. Isso move o recurso de um std::unique_ptr
para outro, deixando o ponteiro original vazio.
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'; }
Quando você usa std::move
, a propriedade do objeto é transferida de um ponteiro único para outro. Após isso, o ponteiro original não possui mais o objeto, e o novo ponteiro se torna seu proprietário.
Swipe to start coding
Complete o seguinte código de forma que a propriedade do inteiro alocado dinamicamente (com valor 42) seja transferida com segurança de ptr1
para ptr2
.
Solução
solution
Obrigado pelo seu feedback!
Movendo Ponteiros Únicos
Cópia Não Permitida
Um std::unique_ptr
é um ponteiro inteligente que gerencia um objeto alocado dinamicamente e garante sua devida exclusão quando sai do escopo. Ele tem posse exclusiva do objeto que gerencia, o que significa que nenhum dois std::unique_ptr
podem possuir o mesmo objeto simultaneamente.
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; }
Movendo um Ponteiro Único
Embora a cópia não seja permitida, você pode transferir a posse do objeto usando std::move
. Isso move o recurso de um std::unique_ptr
para outro, deixando o ponteiro original vazio.
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'; }
Quando você usa std::move
, a propriedade do objeto é transferida de um ponteiro único para outro. Após isso, o ponteiro original não possui mais o objeto, e o novo ponteiro se torna seu proprietário.
Swipe to start coding
Complete o seguinte código de forma que a propriedade do inteiro alocado dinamicamente (com valor 42) seja transferida com segurança de ptr1
para ptr2
.
Solução
solution
Obrigado pelo seu feedback!