Ponteiro bruto de C ++ e std :: shared_ptr
Estou trabalhando comstd::shared_ptr
e durante meu desenvolvimento de software, encontrei alguns casos que me permitiram duvidar do gerenciamento de memória. Eu tinha uma biblioteca de terceiros que me dava sempre ponteiros crus de funções e no meu código eu estava transformando-os emstd::shared_ptr
(de std e não de boost. A propósito, qual é a diferença entre os dois?). Então, digamos que eu tenha o seguinte código:
ClassA* raw = new ClassA;
std::shared_ptr<ClassA> shared(raw);
O que acontece agora quando o ponteiro compartilhado sai do escopo (digamos que foi declarado localmente em uma função e agora estou saindo da função). Será que oClassA
objeto ainda existe porque um ponteiro bruto está apontando para ele?