Обзор библиотеки Boost — различия между версиями
Материал из SEWiki
м |
|||
| Строка 3: | Строка 3: | ||
== Умные указатели == | == Умные указатели == | ||
| − | Все рассмотренные в прошлом семестре <<умные> указатели | + | Все рассмотренные в прошлом семестре <<умные> указатели [http://www.boost.org/doc/libs/1_46_1/libs/smart_ptr/smart_ptr.htm представлены |
| − | + | в библиотеке Boost. | |
* <code>scoped_ptr</code> и <code>scoped_array</code>, | * <code>scoped_ptr</code> и <code>scoped_array</code>, | ||
* <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>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>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</code> совпадает с размером указателя, | ||
* объекта <code>intrusive_ptr<T></code> можно проинициализировать <code>T*</code>. | * объекта <code>intrusive_ptr<T></code> можно проинициализировать <code>T*</code>. | ||
Версия 11:16, 31 мая 2011
Мы рассмотрим несколько полезных модулей библиотеки Boost,
Умные указатели
Все рассмотренные в прошлом семестре <<умные> указатели [http://www.boost.org/doc/libs/1_46_1/libs/smart_ptr/smart_ptr.htm представлены в библиотеке 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*.