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.

questionAnswers(4)

yourAnswerToTheQuestion