Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
практика.docx
Скачиваний:
10
Добавлен:
09.06.2015
Размер:
79.45 Кб
Скачать

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]