Читать «Полный справочник по С++» онлайн - страница 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.