Класс unique_ptr
Класс unique_ptr - это умный указатель,
который обеспечивает уникальное владение динамически
выделенным объектом. Такой указатель не может быть
скопирован, но может быть перемещён. Когда
unique_ptr выходит из области видимости,
он автоматически удаляет объект, которым владеет,
освобождая память. В качестве параметра шаблона
указывается тип объекта, которым будет управлять
указатель. Вторым необязательным параметром
можно задать пользовательский удалитель.
Синтаксис
#include <memory>
std::unique_ptr<Type> ptr(new Type());
Пример
Давайте создадим unique_ptr для целого числа
и выведем его значение:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
unique_ptr<int> ptr(new int(42));
cout << *ptr << endl;
return 0;
}
Результат выполнения кода:
42
Пример
Давайте создадим unique_ptr для строки
и выведем её длину:
#include <iostream>
#include <memory>
#include <string>
using namespace std;
int main()
{
unique_ptr<string> ptr(new string("abcde"));
cout << ptr->length() << endl;
return 0;
}
Результат выполнения кода:
5
Пример
Давайте переместим владение объектом из одного
unique_ptr в другой с помощью функции
move:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
unique_ptr<int> ptr1(new int(123));
unique_ptr<int> ptr2 = move(ptr1);
if (ptr1 == nullptr) {
cout << "ptr1 is empty" << endl;
}
cout << *ptr2 << endl;
return 0;
}
Результат выполнения кода:
"ptr1 is empty"
123
Смотрите также
-
метод
get,
который возвращает сырой указатель -
метод
reset,
который заменяет управляемый объект -
метод
release,
который освобождает владение объектом -
функция
make_unique,
которая создаёт unique_ptr