Передача общих указателей в качестве аргументов

Если я объявлю объект, обернутый общим указателем:

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

Спасибо.

82
задан R. Martinho Fernandes 4 August 2012 в 03:18
поделиться