Повысить умные указатели - PullRequest
16 голосов
/ 04 марта 2011

Когда следует использовать intrusive_ptr вместо shared_ptr?

Ответы [ 3 ]

15 голосов
/ 04 марта 2011

Если в объекте, на который вы указываете, уже есть счетчик ссылок.

11 голосов
/ 04 марта 2011

Из-за пределов стандартной библиотеки 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, когда

  • Это необходимо рассматривать как интеллектуальный указатель.
  • Существует код, который использует или предоставляет навязчивый счетчик ссылок.
  • Обязательно, чтобы размер умного указателя равнялся размеру необработанного указателя.
3 голосов
/ 04 марта 2011

Что сказал Ник. Один из реальных примеров - управление указателями COM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...