Если я объявлю объект, обернутый общим указателем:
std::shared_ptr<myClass> myClassObject(new myClass());
, то я хотел бы передать его в качестве аргумента методу:
DoSomething(myClassObject);
//the called method
void DoSomething(std::shared_ptr<myClass> arg1)
{
arg1->someField = 4;
}
Вышеприведенное просто увеличивает счетчик ссылок shared_pt, и все прохладно? Или он оставляет висячий указатель?
Вы все еще должны это делать?:
DoSomething(myClassObject.Get());
void DoSomething(std::shared_ptr<myClass>* arg1)
{
(*arg1)->someField = 4;
}
Я думаю, что 2-й способ может быть более эффективным, потому что он должен копировать только 1 адрес (в отличие от всего умного указателя), но 1-й способ кажется более читаемым и я не ожидаю выхода за пределы производительности. Я просто хочу убедиться, что в этом нет ничего опасного.
Спасибо.