Jestem mylony z pojęciem "silny wskaźnik" i "słaby wskaźnik". Sama Diane Hackborn powiedziała:Co to są mocne wskaźniki i słabe wskaźniki
Obiekt pozostanie w pobliżu, gdy pojawią się silne wskaźniki; jest zniszczony po zwolnieniu ostatniego. Wszystko, co możesz zrobić ze słabym wskaźnikiem , to porównanie i próba promowania do silnego wskaźnika; ta ostatnia nie powiedzie się, jeśli nie ma innych mocnych wskaźników na obiekcie .
Co jest dość niejasne dla mnie. Czy silny wskaźnik jest odpowiednikiem wspólnego wskaźnika (boost::
)? I jaka jest rola słabego wskaźnika, jeśli jest po prostu próba promowania się do silnego wskaźnika? Na przykład, kiedy potrzebujemy słabych i mocnych wskaźników?
Aktualizacja:
Dziękuję wszystkim, ale pytam konkretnie o androida jądra sp
i wp
, a oni nie mają nic wspólnego z odniesieniami Javy w ogóle.
Zasadniczo próbuję złamać kod tutaj http://www.androidenea.com/2010/03/share-memory-using-ashmem-and-binder-in.html I nie bardzo rozumiem użycie sp
i wp
Aktualizacja:
Rzeczywista odpowiedź leży w komentarzach przyjętą odpowiedź. Dzięki Gabe Sechan:
Silne i słabe wskaźniki są różne implementacje inteligentne wskaźnik i zrobić więcej w tym samym thing- gdy wskaźnik znajdzie się poza zasięgiem, tak długo co najmniej jeden z tych dokumentów ma silne wskaźnik nie będzie być uwolnionym. Jeśli odniesienie tylko słabe wskaźniki (lub nic) to będzie. Czek jest wykonywany za każdym razem, gdy odwołuje się do niego silne lub słabe odniesienie.
jeśli mam 10 słabych wskaźników odnoszących się do tego samego obiektu i jeden z tych 10 wykracza poza zakres, obiekt zostanie zniszczony? Podczas gdy z mocnymi wskazówkami, tylko gdy wszystkie 10 z nich wykracza poza zakres, obiekt zostanie zniszczony?
Tak, prawie. Jeśli wszystko, co masz, to 10 słabych wskaźników, to prawdopodobnie wykroczył poza zakres, kiedy ostatni silny wskaźnik wyłączył się z zakresu . Wdrożenie może pozwolić mu na pozostanie trochę mniejszym, jeśli jest dłuższy, jeśli jest wolna pamięć, ale zostanie przerwane, jeśli przejdziesz na w stan niskiej ilości pamięci i to nie brzmi tak, jak ich implementacja jest zaawansowana od jej cytatu. A użycie tego jest nadal głównie buforowaniem - jest to mniej więcej odpowiednik boost sharedi zwiększenie weak_ptr. Zasadniczo, słaby wskaźnik może mieć obiekt, który odwołuje się w dowolnym momencie.
+1 za wysiłek wyjaśnienia tej koncepcji. – miller