Junior — Middle
Quais são as diferenças entre um ponteiro não envolvente padrão e um ponteiro inteligente std::unique_ptr em C++?
sobes.tech IA
Resposta da IA
As principais diferenças entre um ponteiro não envolvido padrão (raw pointer) e um ponteiro inteligente std::unique_ptr em C++:
-
Gestão do tempo de vida do objeto:
- Raw pointer simplesmente armazena o endereço, mas não gerencia o tempo de vida do objeto. É necessário chamar delete manualmente.
- std::unique_ptr remove automaticamente o objeto ao sair do escopo, prevenindo vazamentos de memória.
-
Propriedade:
- Raw pointer não possui o objeto, pode ser copiado e transferido livremente.
- std::unique_ptr possui o objeto de forma exclusiva, a cópia é proibida, apenas pode ser movida.
-
Segurança:
- Raw pointer pode levar a erros se esquecer de deletar o objeto ou usá-lo após a exclusão.
- std::unique_ptr ajuda a evitar esses erros graças à sua gestão automática.
Exemplo de uso de std::unique_ptr:
#include <memory>
std::unique_ptr<int> ptr = std::make_unique<int>(42);
// ptr irá remover automaticamente o objeto ao sair do escopo
Assim, std::unique_ptr facilita a gestão de memória dinâmica e aumenta a segurança do código.