Estou lendo http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html e alguns problemas de segurança de thread ainda não estão claros para mim:
- Padrão garante que a contagem de referência seja tratada com segurança de thread e seja independente de plataforma, certo?
- Problema semelhante - o padrão garante que apenas um encadeamento (segurando a última referência) irá chamar delete no objeto compartilhado, certo?
- shared_ptr não garante qualquer segurança de thread para objeto armazenado nele?
EDITAR:
Pseudo-código:
// Thread I
shared_ptr<A> a (new A (1));
// Thread II
shared_ptr<A> b (a);
// Thread III
shared_ptr<A> c (a);
// Thread IV
shared_ptr<A> d (a);
d.reset (new A (10));
Chamar reset () no encadeamento IV excluirá a instância anterior da classe A criada no primeiro encadeamento e a substituirá por uma nova instância? Além disso, após chamar reset () no thread IV, os outros threads verão apenas o objeto recém-criado?
make_shared
vez denew