#include <sh_ptr.hpp>
Открытые члены | |
sh_ptr (T *ptr=0) | |
Создает объект, ответственный за уничтожение переданного указателя. | |
sh_ptr (const sh_ptr &shp) | |
Копирует переданный объект просто увеличивая количество ссылок на разделяемый указатель. | |
~sh_ptr () | |
Уменьшает количество ссылок на разделяемый указатель и удаляет его, если на него никто больше не ссылается. | |
sh_ptr & | operator= (const sh_ptr &shp) |
Присваивает новое значение. | |
void | swap (sh_ptr &shp) |
Обменивает содержимое объектов. | |
T & | operator * () const |
Возвращает ссылку на разделяемый объект при применении к sh_ptr оператора разыменования. | |
T * | operator-> () const |
Возвращает указатель на разделяемый объект при применении к sh_ptr оператора ->. | |
T * | get () const |
Возвращает значение разделяемого указателя. | |
void | set (T *ptr) |
Устанавливает значение разделяемого указателя, т.е. | |
size_t | refs () const |
Возвращает количество ссылок. | |
Закрытые данные | |
Rep * | rep |
указатель на разделяемое представление. |
В его задачу входит автоматическое уничтожение переданного объекта, когда на него не останется больше ссылок. Если необходимо "забрать" владение переданным указателем у всех копий sh_ptr, то нужно воспользоваться вызовом set(0), в результате чего деструктор sh_ptr ничего не уничтожит, т.к. delete 0 является пустой операцией.
См. определение в файле sh_ptr.hpp строка 29
|
Создает объект, ответственный за уничтожение переданного указателя. Указатель будет корректно удален даже в случае возникновения исключения в конструкторе sh_ptr, т.о. вызов sh_ptr<T>(new T) не приведет к утечке ресурсов. Тем не менее, не стоит забывать, что вызов вроде f(sh_ptr<T1>(new T1), sh_ptr<T2>(new T2)) уже чреват потерей объектов, т.к. порядок вычисления подвыражений не определен и новые объекты T1 и T2 могут быть созданы до соответствующих sh_ptr, отвечающих за освобождение ресурсов. См. определение в файле sh_ptr.hpp строка 70
00071 { 00072 try { rep=new Rep(ptr); } 00073 catch (...) { 00074 delete ptr; 00075 throw; 00076 } 00077 } |
|
Копирует переданный объект просто увеличивая количество ссылок на разделяемый указатель.
См. определение в файле sh_ptr.hpp строка 83 Перекрестные ссылки sh_ptr< T >::Rep::refs и sh_ptr< T >::rep.
|
|
Уменьшает количество ссылок на разделяемый указатель и удаляет его, если на него никто больше не ссылается.
См. определение в файле sh_ptr.hpp строка 93 Перекрестные ссылки sh_ptr< T >::Rep::refs.
|
|
Возвращает значение разделяемого указателя.
См. определение в файле sh_ptr.hpp строка 134 Перекрестные ссылки sh_ptr< T >::Rep::ptr.
|
|
Возвращает ссылку на разделяемый объект при применении к sh_ptr оператора разыменования.
См. определение в файле sh_ptr.hpp строка 123 Перекрестные ссылки sh_ptr< T >::Rep::ptr.
|
|
Возвращает указатель на разделяемый объект при применении к sh_ptr оператора ->.
См. определение в файле sh_ptr.hpp строка 129 Перекрестные ссылки sh_ptr< T >::Rep::ptr.
|
|
Присваивает новое значение. Количество ссылок на старый разделяемый указатель уменьшается (что может привести к его удалению), а на новый -- увеличивается. См. определение в файле sh_ptr.hpp строка 100 Перекрестные ссылки sh_ptr< T >::Rep::refs и sh_ptr< T >::rep.
|
|
Возвращает количество ссылок.
См. определение в файле sh_ptr.hpp строка 145 Перекрестные ссылки sh_ptr< T >::Rep::refs.
|
|
Устанавливает значение разделяемого указателя, т.е. все копии текущего sh_ptr станут указывать на новый объект. См. определение в файле sh_ptr.hpp строка 140 Перекрестные ссылки sh_ptr< T >::Rep::ptr.
|
|
Обменивает содержимое объектов.
См. определение в файле sh_ptr.hpp строка 112 Перекрестные ссылки sh_ptr< T >::rep.
|
|
указатель на разделяемое представление.
См. определение в файле sh_ptr.hpp строка 57 Используется в sh_ptr< T >::operator=(), sh_ptr< T >::sh_ptr() и sh_ptr< T >::swap(). |