Smart Pointers podem ser comparadas ao Garbage Collector?

Olá!

Bom, a dúvida é essa: “Smart Pointers podem ser comparadas ao Garbage Collector?”

obrigado!

Não; o uso de smart pointers implica em desalocação de objetos determinística, enquanto o garbage collector efetua desalocação de objetos não-determinística.

rss
Imaginei que voce fosse responder thingol! rss

E o que isso quer dizer?

Obrigado!

Um smart pointer (como o “shared_ptr” que está presente na TR1 do C++0X, ou no Boost) tem uma política de chamar o destrutor do objeto (e portanto efetuar sua desalocação) em um instante bem determinado; no caso do shared_ptr, quando a contagem de referências ao objeto for zerada.

No caso de referências e garbage collectors, mesmo que todas as referências a um objeto sejam anuladas, o objeto somente será desalocado quando o “garbage collector” assim o determinar.

Que o Smart Pointer tem hora certa para funcionar, no caso, no exato instante que a contagem de referências chegar a zero. Já no caso do garbage collector, por se tratar de um processo externo, é impossível determinarmos o momento exato que ele irá atuar.

Outra coisa, o garbage collector pode automaticamente detectar ilhas de referências, como a classe A->B e B->A mas ninguém apontando para A ou B. No caso de SmartPointers, ou o programador identifica isso de maneira consciente e usa um weak pointer, ou os dois objetos não serão coletados, gerando leaks.

A confusão ocorre pq os Smart pointers efetivamente fazem o papel de Garbage Collection, porém, eles não são um Garbage Collector.
O próprio nome já implica em uma entidade externa, e não em várias pequenas classes. No fundo, podem ser comparados pela sua utilidade, mas não pelo seu mecanismo de funcionamento.

Entendido.
Em suma, os dois fazem as mesmas coisas, que é proteger o programador, porém como fazem é diferente.
E os smart pointers são opcionais. Já o Garbage, está sempre lá! rs

obrigado!