Читать «Полный справочник по С++» онлайн - страница 425
Герберт Шилдт
В классе auto_ptr определены операции =, * и ->. Кроме того, он содержит две функции-члена.
IT *get() const throwt);
T ‘released const throwt);
Функция get () возвращает указатель на объект класса т. Функция release () лишает вызывающий объект класса auto_ptr права собственности и возвращает указатель на объект класса т. После вызова функции release () объект класса т, которым владеет объект класса auto_ptr, вышедший за пределы видимости, не уничтожается.
Рассмотрим программу, демонстрирующую применение класса auto_ptr.
// Демонстрация класса auto_ptr.
#include ciostream>
#include cmemory> using namespace std;
class X { public:
X() { cout cc “создание\п"; )
—X() { cout cc "уничтожение\п"; }
void ft) { cout cc "Внутри функции f()\n“; }
} ;
int maint)
p2 = pi; // Передача права владения p2->f();
// Объекты класса auto_ptr можно присваивать // обычным указателям.
X *ptr = р2.get(); ptr->f();
return 0;
}
Результат работы программы показан ниже.
(создание
Внутри функции f()
Внутри функции f() уничтожение
Обратите внимание на то, что функцию f (), являющуюся членом объекта х, можно вызывать как с помощью объекта класса auto_ptr, так и через обычный указатель, возвращаемый функцией get().
В Класс pair
Класс pair используется для хранения пар объектов, как это происходит в ассоциативном контейнере. Его шаблонная спецификация имеет следующий вид.
template cclass Ktype, class Vtype> struct pair { typedef Ktype first_type; typedef Vtype second_type;
Ktype first;
Vtype second;
// Конструкторы pair () ;
pair(const Ktype &k, const Vtype &v); templatecclass A, class B> pair(constcA, B> &ob);
)
В поле first обычно хранится ключ, а в поле value — значение, связанное с этим ключом.
В классе pair определены следующие операции: ==, !=, <, <=, > и >=.
Пары можно создавать либо с помощью конструктора класса pair, либо с помощью функции make_pair(), которая объединяет свои параметры. Функция make_pair () является обобщенной. Ее прототип выглядит следующим образом.
I template cclass Ktype, class Vtype>
paircKtype, Vtype> make_pair (const Ktype &£, const Vt\pc &v) ;
Как видим, эта функция возвращает пару, состоящую из объектов, имеющих типы Ktype и Vtype. Преимущество функции make_type() заключается в том, что типы объектов, из которых образуется пара, определяются компилятором автоматически, а не задаются программистом явным образом.
Класс pair И функция make_pair() используют заголовок <utility>.
Локализация
Стандарт языка C++ содержит большую библиотеку классов, предназначенных для локализации программ. Эти классы позволяют приложениям задавать или получать информацию о геополитическом окружении, в котором они выполняются. Таким образом, они определяют, например, формат представления денежных величин, времени и даты, а также порядок их сравнения. Кроме того, эти классы позволяют классифицировать символы. Библиотека локализации использует заголовок <locale>. Она оперирует наборами классов, в которых определяются аспекты локализации (facets) — информация, связанная с локализацией программ. Все аспекты локализации являются производными от класса facet, который в свою очередь вложен в класс locale.