2012-11-12 11 views
9

Wydaje się nieefektywne tworzenie tymczasowego pliku shared_ptr tylko po to, aby zobaczyć, czy weak_ptr wskazuje na poprawny obiekt. Nie chcę nawet uzyskać dostępu do obiektu. Dzieje się tak dlatego, że mam funkcję, która zwraca weak_ptr z wektora shared_ptr i jeśli zwraca pustą weak_ptr, oznacza to, że obiekt nie istnieje już z tym GUID.Czy muszę używać weak_ptr.lock() tylko do sprawdzenia, czy wskazuje na poprawny obiekt?

Po prostu testuję, czy obiekt istnieje.

Czy istnieje inny sposób sprawdzenia, czy plik weak_ptr jest pusty, czy nie, bez tworzenia pliku shared_ptr?

+0

Możesz użyć blokady() – imreal

+0

W jaki sposób otrzymałeś słaby wskaźnik? _ To interfejs, który musi się zmienić. –

+1

lock() zwraca shared_ptr, dlatego właśnie napisałem ten post. – EddieV223

Odpowiedz

20

Można użyć funkcji składowej expired().

+1

'use_count' też. – Pubby

+4

@Pubby: Wolę używać 'if (someVector.empty())' over 'if (someVecor.size() == 0) '. Ten sam powód, dla którego preferuję 'expired' w tym przypadku. Bardziej wyraźna –

+0

Nienawidzę korzystać z dokumentacji Microsoft, chyba że jest to funkcja lub pytanie specyficzne dla Microsoft. Lepiej byłoby http://pl.cppreference.com/w/cpp/memory/weak_ptr/expired –