Если я объявляю объект, заключенный в общий указатель:
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 адрес (в отличие от всего умного указателя), но первый способ кажется более читаемым, и я не ожидаю, что вы нажимаете ограничения производительности. Я просто хочу убедиться, что в этом нет ничего опасного.
Спасибо.