Я смущен понятием «сильный указатель» и «слабый указатель». Дайан Хакборн сама сказала, что:Что такое сильные указатели и слабые указатели
Объект останется вокруг, пока есть сильные указатели; это уничтожено после выпуска последнего. Все, что вы можете сделать со слабым указателем , - это сравнение и попытка продвигать сильный указатель; последний не удастся, если нет других сильных указателей на объекте .
Это совершенно неясно. Является ли сильный указатель эквивалентным (boost::
) общим указателем? И какова роль слабого указателя, если он просто пытается продвинуть себя к сильному указателю? Например, когда нам нужны слабые и сильные указатели?
Update:
Спасибо всем, но я спрашиваю конкретно о ядре sp
и wp
андроида, и они не имеют ничего общего со ссылками Java на всех.
В основном я пытаюсь взломать код здесь http://www.androidenea.com/2010/03/share-memory-using-ashmem-and-binder-in.html И действительно не понимаю использования sp
и wp
Update:
Фактический ответ лежит в комментариях принятого ответ. Благодаря Gabe Sechan:
Сильные и слабые указатели различных реализаций смарт-указатель и делать то же thing-, когда указатель выходит из области видимости, так долго как по крайней мере один сильный указатель ссылки него не будет быть освобожденным. Если только слабые указатели (или ничего) ссылок, то это будет. Проверка выполняется всякий раз, когда проскальзывает сильная или слабая ссылка на нее.
если у меня есть 10 слабых указателей, ссылающихся на один и тот же объект, и один из те 10 выходит за пределы области, объект будет уничтожен? В то время как с сильными указателями, только если все 10 из них выйдут из сферы действия, будет уничтожен объект ?
Да, почти. Если у вас всего 10 слабых указателей, вероятно, уже вышли из сферы действия, когда последний сильный указатель вышел области. Реализация может позволить ему придерживаться немного , пока дольше, если есть запасная память, но она будет измельчена, если вы перейдете в состояние низкой памяти, и это не похоже на то, что реализация - это продвинутая из ее цитаты. И использование этого по-прежнему в основном кэширование - это примерно эквивалентно boost shared_ptr и boost weak_ptr. Таким образом, в основном, слабый указатель может иметь объект , он ссылается в любой момент.
+1 для усилий, чтобы объяснить эту концепцию – miller