Повысить навязчивый указатель

Я немного запутался насчет навязчивого указателя буста. Определение гласит:

«Каждый новый intrusive_ptr экземпляр увеличивает количество ссылок на
используя неквалифицированный вызов функции intrusive_ptr_add_ref,
передавая ему указатель в качестве аргумента. Точно так же, когда
intrusive_ptr разрушается, это вызывает intrusive_ptr_release; этот
функция отвечает за уничтожение объекта при его обращении
количество падает до нуля. Ожидается, что пользователь предоставит
определения этих двух функций. «

Означает ли это, что я должен реализовать эти методы или я могу это сделать? Дело в том, что мы используем его, потому что функция требует навязчивого указателя. Мы использовали разделяемый указатель в других местах, поэтому просто волновались, управляется ли указатель, и будет ли он удален, когда на него больше не будет ссылок.

3

Решение

Вы должен обеспечить эти функции. Вот как boost::intrusive_ptr работает.

Давайте сравним это с boost::shared_ptr, shared_ptr управляет счетчиком ссылок в блоке управления, связанном с получателем. Создание shared_ptr увеличивает счет. Уничтожение shared_ptr уменьшает счет. Когда счет возвращается к 0, пуанти уничтожается.

intrusive_ptr работает точно так же, но не управляет самим счетчиком ссылок. Он просто сигнализирует своему клиенту «теперь счет должен быть увеличен» и «теперь счет должен быть уменьшен». Он делает это, вызывая две упомянутые функции, intrusive_ptr_add_ref а также intrusive_ptr_release, Если вы не определите их, вы получите ошибку компиляции.

Думайте об этих функциях как о интерфейсе со счетчиком ссылок. С помощью intrusive_ptr указывает, что refcount управляется где-то вне указателя (обычно в самом pointee), а указатель просто вторгается на этот счет, используя его в своих целях.

4

Другие решения

Других решений пока нет …