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