Обзор библиотеки 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*.