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