Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

Из-за стандартной библиотеки С++: введение в Boost Бьёрн Карлссон

В большинстве ситуаций вам не следует использовать 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

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