Passando ponteiros compartilhados como argumentos
Se eu declarar um objeto envolto em um ponteiro compartilhado:
std::shared_ptr<myClass> myClassObject(new myClass());
então eu queria passar isso como um argumento para um método:
DoSomething(myClassObject);
//the called method
void DoSomething(std::shared_ptr<myClass> arg1)
{
arg1->someField = 4;
}
O acima simplesmente incrementa a contagem de referências do shared_pt e tudo é legal? Ou deixa um ponteiro pendente?
Você ainda deveria fazer isso ?:
DoSomething(myClassObject.Get());
void DoSomething(std::shared_ptr<myClass>* arg1)
{
(*arg1)->someField = 4;
}
Eu acho que a segunda maneira pode ser mais eficiente, pois só tem que copiar um endereço (em oposição a todo o ponteiro inteligente), mas a primeira via parece mais legível e eu não antecipo os limites de desempenho. Eu só quero ter certeza de que não há algo perigoso nisso.
Obrigado.