В C ++ я использую boost::shared_ptr
и boost::weak_ptr
для автоматического удаления ненужных объектов. Я знаю эти работы с подсчетом ссылок.
В Java память управляется сборщиком мусора, который рассматривает встроенные ссылки на объекты как strong , WeakReference
как слабый и SoftReference
как нечто промежуточное (может быть собрано GC, но может также выжить в GC), что действительно удобно для кэширования объектов в течение некоторого времени, но выбрасывает их, как только объем свободной памяти уменьшается.
Так что теперь я вернулся в C ++, и мне не хватает комфорта, когда есть мягкие ссылки. Интересно, возможна ли мягкая ссылка с подсчетом ссылок вообще? Когда последняя сильная ссылка на объект очищается и остается мягкая ссылка, когда она все-таки будет удалена? Я мог бы подумать о некоторых схемах, но ни одна из них не кажется мне умной.
На всякий случай, если есть правильная семантика для мягких ссылок наряду с подсчетом ссылок, мне интересно, реализовано ли это уже, возможно, способом, который даже совместим с boost::shared_ptr
(или эквивалентом C ++ TR1 std::shared_ptr
в этом отношении ).
Если ответ на оба вопроса отрицательный, каковы альтернативы в сценарии кэширования объектов?
EDIT:
Конечно, я говорю о ситуации, когда кеширование действительно полезно, потому что объекты дорогостоящие для построения (представьте несколько вариантов доступа к базе данных и запросы к сети), но их слишком много для хранения. они все навсегда.