Pasando punteros compartidos como argumentos
Si declaro un objeto envuelto en un puntero compartido:
std::shared_ptr<myClass> myClassObject(new myClass());
luego quise pasarlo como argumento a un método:
DoSomething(myClassObject);
//the called method
void DoSomething(std::shared_ptr<myClass> arg1)
{
arg1->someField = 4;
}
¿Lo anterior simplemente incrementa el recuento de referencias de shared_pt y todo está bien? ¿O deja un puntero que cuelga?
¿Todavía se supone que debes hacer esto ?:
DoSomething(myClassObject.Get());
void DoSomething(std::shared_ptr<myClass>* arg1)
{
(*arg1)->someField = 4;
}
Creo que la segunda forma puede ser más eficiente porque solo tiene que copiar 1 dirección (a diferencia de todo el puntero inteligente), pero la primera forma parece más legible y no anticipo los límites de rendimiento. Solo quiero asegurarme de que no haya nada peligroso en ello.
Gracias.