#include <sh_ptr.hpp>
Открытые члены | |
sh_array (T *ptr=0) | |
Создает объект, ответственный за уничтожение переданного указателя на массив объектов. | |
sh_array (const sh_array &sha) | |
Копирует переданный объект просто увеличивая количество ссылок на разделяемый указатель. | |
~sh_array () | |
Уменьшает количество ссылок на разделяемый указатель и удаляет его, если на него никто больше не ссылается. | |
sh_array & | operator= (const sh_array &sha) |
Присваивает новое значение. | |
void | swap (sh_array &sha) |
Обменивает содержимое объектов. | |
T & | operator[] (size_t i) const |
Возвращает ссылку на i-тый элемент разделяемого массива. | |
T * | get () const |
Возвращает значение разделяемого указателя. | |
void | set (T *ptr) |
Устанавливает значение разделяемого указателя, т.е. | |
size_t | refs () const |
Возвращает количество ссылок. | |
Закрытые данные | |
Rep * | rep |
указатель на разделяемое представление |
В его задачу входит автоматическое уничтожение переданного массива, когда на него не останется больше ссылок. Если необходимо "забрать" владение переданным указателем у всех копий sh_array, то нужно воспользоваться вызовом set(0), в результате чего деструктор sh_array ничего не уничтожит, т.к. delete 0 является пустой операцией. Как правило, использование данного "умного указателя" на массив не очень удачная идея и лучше выбрать комбинацию sh_ptr<std::vector>.
См. определение в файле sh_ptr.hpp строка 159
|
Создает объект, ответственный за уничтожение переданного указателя на массив объектов. Указатель будет корректно удален даже в случае возникновения исключения в конструкторе sh_array, т.о. вызов sh_array<T>(new T[10]) не приведет к утечке ресурсов. См. определение в файле sh_ptr.hpp строка 196
00197 { 00198 try { rep=new Rep(ptr); } 00199 catch (...) { 00200 delete [] ptr; 00201 throw; 00202 } 00203 } |
|
Копирует переданный объект просто увеличивая количество ссылок на разделяемый указатель.
См. определение в файле sh_ptr.hpp строка 209 Перекрестные ссылки sh_array< T >::Rep::refs и sh_array< T >::rep.
|
|
Уменьшает количество ссылок на разделяемый указатель и удаляет его, если на него никто больше не ссылается.
См. определение в файле sh_ptr.hpp строка 219 Перекрестные ссылки sh_array< T >::Rep::refs.
|
|
Возвращает значение разделяемого указателя.
См. определение в файле sh_ptr.hpp строка 253 Перекрестные ссылки sh_array< T >::Rep::ptr.
|
|
Присваивает новое значение. Количество ссылок на старый разделяемый указатель уменьшается (что может привести к его удалению), а на новый -- увеличивается. См. определение в файле sh_ptr.hpp строка 226 Перекрестные ссылки sh_array< T >::Rep::refs и sh_array< T >::rep.
|
|
Возвращает ссылку на i-тый элемент разделяемого массива.
См. определение в файле sh_ptr.hpp строка 248 Перекрестные ссылки sh_array< T >::Rep::ptr.
|
|
Возвращает количество ссылок.
См. определение в файле sh_ptr.hpp строка 264 Перекрестные ссылки sh_array< T >::Rep::refs.
|
|
Устанавливает значение разделяемого указателя, т.е. все копии текущего sh_array станут указывать на новый массив объектов. См. определение в файле sh_ptr.hpp строка 259 Перекрестные ссылки sh_array< T >::Rep::ptr.
|
|
Обменивает содержимое объектов.
См. определение в файле sh_ptr.hpp строка 238 Перекрестные ссылки sh_array< T >::rep.
|
|
указатель на разделяемое представление
См. определение в файле sh_ptr.hpp строка 187 Используется в sh_array< T >::operator=(), sh_array< T >::sh_array() и sh_array< T >::swap(). |