Обзор библиотеки Boost — различия между версиями
Материал из SEWiki
Строка 9: | Строка 9: | ||
* <code>shared_ptr</code> и <code>shared_array</code>, | * <code>shared_ptr</code> и <code>shared_array</code>, | ||
* <code>weak_ptr</code> --- ссылка на объект, который находится под управлением <code>shared_ptr</code>. | * <code>weak_ptr</code> --- ссылка на объект, который находится под управлением <code>shared_ptr</code>. | ||
− | + | Следует отметить, что через этот указатель нельзя обратиться к объекту напрямую --- можно только создать | |
− | * <code>intrusive_ptr</code> | + | <code>shared_ptr</code>, указывающий на этот объект, с помощью метода <code>lock()</code> --- если объект |
+ | уже уничтожен, то возвращается пустой <code>shared_ptr</code>. | ||
+ | * <code>intrusive_ptr<T></code> --- аналог <code>shared_ptr<T></code>; требует, чтобы у типа <code>T</code> | ||
+ | были определены методы intrusive_ptr_add_ref() и intrusive_ptr_release(). У <code>intrusive_ptr</code>, по | ||
+ | крайней мере, два преимущества перед <code>shared_ptr</code>: | ||
+ | * размер объекта <code>intrusive_ptr</code> совпадает с размером указателя, | ||
+ | * объекта <code>intrusive_ptr<T></code> можно проинициализировать <code>T*</code>. |
Версия 11:15, 31 мая 2011
Мы рассмотрим несколько полезных модулей библиотеки Boost,
Умные указатели
Все рассмотренные в прошлом семестре <<умные> указатели представлены в библиотеке Boost.
-
scoped_ptr
иscoped_array
, -
shared_ptr
иshared_array
, -
weak_ptr
--- ссылка на объект, который находится под управлениемshared_ptr
.
Следует отметить, что через этот указатель нельзя обратиться к объекту напрямую --- можно только создать
shared_ptr
, указывающий на этот объект, с помощью метода lock()
--- если объект
уже уничтожен, то возвращается пустой shared_ptr
.
-
intrusive_ptr<T>
--- аналогshared_ptr<T>
; требует, чтобы у типаT
были определены методы intrusive_ptr_add_ref() и intrusive_ptr_release(). У intrusive_ptr
, по
крайней мере, два преимущества перед shared_ptr
:
* размер объектаintrusive_ptr
совпадает с размером указателя, * объектаintrusive_ptr<T>
можно проинициализироватьT*
.