- •Содержание
- •1. Пары
- •2. Контейнеры stl
- •3. Алгоритмы stl
- •4. Адаптеры контейнеров
- •5. Ассоциативные контейнеры
- •5.1. Множества и мультимножества
- •5.2 Отображения и мультиотображения
- •6. Строки
- •7. Потоки ввода-вывода
- •8. Итераторы
- •9. Управление памятью. Класс auto_ptr
- •Список использованных источников
9. Управление памятью. Класс auto_ptr
Тип auto_ptr является "умным указателем". Память, выделенная под объекты, на которые указывают указатели auto_ptr, автоматически освобождается при выходе из цикла или функции, тем самым предотвращая утечку памяти.
Ниже представлен код программы, демонстрирующий применение указателей auto_ptr.
#include <iostream>
#include <memory>
using namespace std;
/*функция, инициализирующая и возвращающая auto_ptr*/
auto_ptr<int> make_ptr(int value){
auto_ptr<int> ptr(new int(value));
return ptr;
}
/*передача auto_ptr по ссылке. Плохой пример т.к. противоречит концепции владения*/
void print (auto_ptr<int> &a){
cout << *a << endl;
}
int main ()
{
auto_ptr<int> a = make_ptr(18);
print(a);
auto_ptr<int> b;
(a.get() == NULL)? cout<<"a: NULL\n" : cout<<"a="<<*a<<endl ;
(b.get() == NULL)? cout<<"b: NULL\n" : cout<<"b="<<*b<<endl ;
/*право владения объектом передаётся к b, указатель a будет
указывать на NULL*/
b=a;
cout<<"\nb=a\n";
(a.get() == NULL)? cout<<"a: NULL\n" : cout<<"a="<<*a<<endl ;
(b.get() == NULL)? cout<<"b: NULL\n" : cout<<"b="<<*b<<endl ;
/*право владения объектом передаётся к a, указатель b будет
указывать на NULL*/
a=b;
cout<<"\na=b\n";
(a.get() == NULL)? cout<<"a: NULL\n" : cout<<"a="<<*a<<endl ;
(b.get() == NULL)? cout<<"b: NULL\n" : cout<<"b="<<*b<<endl ;
return 0;
}
Результат работы программы:
18
a=18
b: NULL
b=a
a: NULL
b=18
a=b
a=18
b: NULL
Список использованных источников
1. Николай Джосьютис С++ Стандартная библиотека. Для профессионалов д — Сп-б.: “Питер”, 2004.
2. Дэвид Р. Мюссер, Жилмер Дж. Дердж, Атул Сейни C++ и STL:
справочное руководство, 2-е изд. (серия C++ in Depth).: Пер. с англ. — М.: OOO “И.Д. Вильямс”, 2010. — 432 с.: ил.
3. Леен Аммерааль STL для программистов на C++ —М.: ДМК, 1999. —240 c.: ил.
4. Set// [Эл. Ресурс]. URL: http://ru.cppreference.com/w/cpp/container/set
[дата обращения 01.10.2012]
5. Multiset//[Эл. Ресурс]. URL: http://ru.cppreference.com/w/cpp/container/set [дата обращения 01.10.2012]
6. Map// [Эл. Ресурс]. URL: http://ru.cppreference.com/w/cpp/container/map
[дата обращения 01.10.2012]
7. Итераторы// [Эл. Ресурс]. URL: http://ru.cppreference.com/w/cpp/iterator
[дата обращения 01.10.2012]