Olá!
Bom, a dúvida é essa: “Smart Pointers podem ser comparadas ao Garbage Collector?”
obrigado!
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!