|
Программирование >> Операторы преобразования типа
Операции с неинициализированной памятью 713 О Просто вызывает деструктор объекта. О Эквивалент: ((Т*)р)->-Т() bool operator== {const распределитель al. const распределитель a2) О Возвращает true, если распределители a1 и а2 взаимозаменяемы. О Два объекта распределителя считаются взаимозаменяемыми, если память, выделенная одним из них, может быть освобождена другим. О Чтобы распределитель мог использоваться со стандартными контейнерами, распределители одного типа обязаны быть взаимозаменяемыми, поэтому функция должна всегда возвращать true. bool operator!= (const распределитель al. const распределитель a2) О Возвращает true, если распределители a1 и а2 взаимозаменяемы. О Эквивалент: \{al==a2) О Чтобы распределитель мог использоваться со стандартными контейнерами, распределители одного типа обязаны быть взаимозаменяемыми, поэтому функция должна всегда возвранщть false. Операции с неинициализированной памятью В этом разделе подробно описаны вспомогательные функции для работы с неинициализированной памятью. Примеры реализаций, безопасных с точки зрения исключений, основаны (с разрешения автора) на коде Грега Колвина (Greg Colvin). void unin1tialized fill (Forwardlterator beg. Forwardlterator end. const T& value) О Инициализирует элементы интервала [beg,end) значением value. О Функция либо выполняется успешно, либо не вносит изменений. О Типичная реализация uninitialized fill(): namespace std { template <class Forwlter. class T> void un1n1t1alized f1ll(ForwIter beg, Forwlter end. const T& value) typedef typename iterator traits<ForwIter>::value type VT: Forwlter save(beg): try { for (; beg!=end: ++beg) { new {statlc cast<vo1d*>{&*beg))\/T(value); eaten (...) [ for (; save!=beg; ++save) { save->~VT(): throw; void uninitialized fill n (Forwardlterator beg. Size пит, const T& value) О Инициализирует пит элементов, начиная с beg, значением value. О Функция либо выполняется успешно, либо не вносит изменений. О Типичная реализация uninitialized fill n(). namespace std ( template <class ForwIter, class Size, class T> void unlnit1al1zed f111 n (ForwIter beg, Size num. const T& value) typedef typename 1terator tra1ts<Forwlter>::value type VT; ForwIter save(beg); try { for с; num--; ++beg) ( new (stat1c cast<vo1d*>(S*beg))\/T(value): catch (...) { for (: save!=beg: ++save) { save->-VT(); throw; О Пример использования функции uninitialized fill n() приведен на с. 703. void un1nltial1zed copy (Inputlterator sourceBeg. Inputlterator sourceEnd. Forwardlterator destBeg) О Элементами из интервала [sourceBeg,sourceEnd) инициализирует память, начиная с destBeg. О Функция ;гибо выполняется успешно, либо не вносит из.менений. Операции с неинициализированной памятью 715 О Типичная реализация uninitialized copy(): nafTiespace std { template <class Inputlter, class FQrwIter> Forwlter un1nitial1zed fill n (Inputlter beg. Inputlter end. Forwlter dest) typedef typename iterator traits<ForwIter>::value type VT: Forwlter save(dest): try ( for (: beg!=end: ++beg.++dest) { new {stat1c cast<vold*>C&*dest))\/T(value): return dest: catch (...) ( for (; save!=dest: ++save) { save->~VT(): throw: Пример использования функции uninitialized copy() приведен на с. 704
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |