Sobes.tech
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.