Przekazywanie wspólnych wskaźników jako argumentów
Jeśli zadeklaruję obiekt zawinięty we współużytkowanym wskaźniku:
std::shared_ptr<myClass> myClassObject(new myClass());
potem chciałem przekazać to jako argument do metody:
DoSomething(myClassObject);
//the called method
void DoSomething(std::shared_ptr<myClass> arg1)
{
arg1->someField = 4;
}
Czy powyższe powoduje zwiększenie liczby referencji shared_pt i wszystko jest w porządku? Czy może zostawia zwisający wskaźnik?
Czy nadal masz to robić ?:
DoSomething(myClassObject.Get());
void DoSomething(std::shared_ptr<myClass>* arg1)
{
(*arg1)->someField = 4;
}
Myślę, że druga droga może być bardziej wydajna, ponieważ musi tylko skopiować 1 adres (w przeciwieństwie do całego inteligentnego wskaźnika), ale pierwsza droga wydaje się bardziej czytelna i nie przewiduję przekroczenia limitów wydajności. Chcę tylko upewnić się, że nie ma w tym nic niebezpiecznego.
Dziękuję Ci.