Титульная страница   Пространства имен   Алфавитный указатель   Классы   Файлы   Члены пространства имен   Члены классов   Члены файла  

Шаблон класса sh_array< T >

Данный класс является разделяемым "умным указателем" с подсчетом ссылок на массив объектов типа T. Подробнее...

#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
 Возвращает количество ссылок.


Закрытые данные

Reprep
 указатель на разделяемое представление.


Подробное описание

template<class T>
class sh_array< T >

Данный класс является разделяемым "умным указателем" с подсчетом ссылок на массив объектов типа T.

В его задачу входит автоматическое уничтожение переданного массива, когда на него не останется больше ссылок. Если необходимо "забрать" владение переданным указателем у всех копий sh_array, то нужно воспользоваться вызовом set(0), в результате чего деструктор sh_array ничего не уничтожит, т.к. delete 0 является пустой операцией. Как правило, использование данного "умного указателя" на массив не очень удачная идея и лучше выбрать комбинацию sh_ptr<std::vector>.

См. определение в файле sh_ptr.hpp строка 159


Конструктор(ы)

template<class T>
sh_array< T >::sh_array T *  ptr = 0  )  [inline, explicit]
 

Создает объект, ответственный за уничтожение переданного указателя на массив объектов.

Указатель будет корректно удален даже в случае возникновения исключения в конструкторе 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       }

template<class T>
sh_array< T >::sh_array const sh_array< T > &  sha  )  [inline]
 

Копирует переданный объект просто увеличивая количество ссылок на разделяемый указатель.

См. определение в файле sh_ptr.hpp строка 209

Перекрестные ссылки sh_array< T >::Rep::refs и sh_array< T >::rep.

00210       {
00211        rep=sha.rep;
00212        rep->refs++;
00213       }

template<class T>
sh_array< T >::~sh_array  )  [inline]
 

Уменьшает количество ссылок на разделяемый указатель и удаляет его, если на него никто больше не ссылается.

См. определение в файле sh_ptr.hpp строка 219

Перекрестные ссылки sh_array< T >::Rep::refs.

00219 { if (--rep->refs==0) delete rep; }


Методы

template<class T>
T* sh_array< T >::get  )  const [inline]
 

Возвращает значение разделяемого указателя.

См. определение в файле sh_ptr.hpp строка 253

Перекрестные ссылки sh_array< T >::Rep::ptr.

00253 { return rep->ptr; }

template<class T>
sh_array& sh_array< T >::operator= const sh_array< T > &  sha  )  [inline]
 

Присваивает новое значение.

Количество ссылок на старый разделяемый указатель уменьшается (что может привести к его удалению), а на новый -- увеличивается.

См. определение в файле sh_ptr.hpp строка 226

Перекрестные ссылки sh_array< T >::Rep::refs и sh_array< T >::rep.

00227       {
00228        sha.rep->refs++;
00229        if (--rep->refs==0) delete rep;
00230        rep=sha.rep;
00231        
00232        return *this;
00233       }

template<class T>
T& sh_array< T >::operator[] size_t  i  )  const [inline]
 

Возвращает ссылку на i-тый элемент разделяемого массива.

См. определение в файле sh_ptr.hpp строка 248

Перекрестные ссылки sh_array< T >::Rep::ptr.

00248 { return rep->ptr[i]; }

template<class T>
size_t sh_array< T >::refs  )  const [inline]
 

Возвращает количество ссылок.

См. определение в файле sh_ptr.hpp строка 264

Перекрестные ссылки sh_array< T >::Rep::refs.

00264 { return rep->refs; }

template<class T>
void sh_array< T >::set T *  ptr  )  [inline]
 

Устанавливает значение разделяемого указателя, т.е.

все копии текущего sh_array станут указывать на новый массив объектов.

См. определение в файле sh_ptr.hpp строка 259

Перекрестные ссылки sh_array< T >::Rep::ptr.

00259 { rep->ptr=ptr; }

template<class T>
void sh_array< T >::swap sh_array< T > &  sha  )  [inline]
 

Обменивает содержимое объектов.

См. определение в файле sh_ptr.hpp строка 238

Перекрестные ссылки sh_array< T >::rep.

00239       {
00240        Rep* tmp=rep;
00241        rep=sha.rep;
00242        sha.rep=tmp;
00243       }


Данные класса

template<class T>
Rep* sh_array< T >::rep [private]
 

указатель на разделяемое представление.

См. определение в файле sh_ptr.hpp строка 187

Используется в sh_array< T >::operator=(), sh_array< T >::sh_array() и sh_array< T >::swap().


Объявления и описания членов класса находятся в файле:
Документация по xcppcomm. Последние изменения: Sat Mar 20 18:21:53 2004. Создано системой doxygen1.3