Smart Pointers podem ser comparadas ao Garbage Collector?

5 respostas
Marck

Olá!

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

obrigado!

5 Respostas

T

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.

Marck

rss
Imaginei que voce fosse responder thingol! rss

E o que isso quer dizer?

Obrigado!

T

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.

ViniGodoy

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.

Marck

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!

Criado 1 de julho de 2009
Ultima resposta 1 de jul. de 2009
Respostas 5
Participantes 3