Из-за пределов стандартной библиотеки C ++: Введение в Boost By Björn Karlsson
В большинстве случаев не следует использовать boost :: intrusive_ptr, потому что функция общего владения легко доступна в boost:: shared_ptr, и неинтрузивный умный указатель является более гибким, чем навязчивый умный указатель.Однако бывают случаи, когда требуется навязчивый подсчет ссылок, возможно, для устаревшего кода или для интеграции со сторонними классами.Когда возникает необходимость, intrusive_ptr отвечает всем требованиям с той же семантикой, что и другие классы интеллектуальных указателей Boost.
Используя другие интеллектуальные указатели Boost, вы обеспечиваете согласованный интерфейс для всех потребностей интеллектуальных указателей, будь они навязчивыми или нет.Счетчик ссылок должен быть предоставлен классами, которые используются с intrusive_ptr.intrusive_ptr управляет счетчиком ссылок, совершая неквалифицированные вызовы двух функций, intrusive_ptr_add_ref и intrusive_ptr_release;эти функции должны правильно манипулировать счетчиком интрузивных ссылок, чтобы intrusive_ptrs работал правильно.Для всех случаев, когда счетчик ссылок уже существует в типах, которые должны использоваться с intrusive_ptr, включить поддержку intrusive_ ptr так же просто, как реализовать эти две функции.
Использовать intrusive_ptr, когда
- Это необходимо рассматривать как интеллектуальный указатель.
- Существует код, который использует или предоставляет навязчивый счетчик ссылок.
- Обязательно, чтобы размер умного указателя равнялся размеру необработанного указателя.