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.

questionAnswers(4)

yourAnswerToTheQuestion