Метод get
Метод get класса unique_ptr возвращает
обычный указатель на объект, которым владеет
умный указатель. При этом владение не передается:
unique_ptr продолжает отвечать за удаление
объекта, а полученный указатель можно использовать
только для наблюдения или передачи в функции,
которые не забирают владение. Метод не принимает
параметров и возвращает указатель типа T*.
Синтаксис
ptr.get()
Пример
Давайте создадим unique_ptr и получим
из него сырой указатель с помощью метода
get:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
unique_ptr<int> ptr = make_unique<int>(42);
int* raw = ptr.get();
cout << *raw << endl;
return 0;
}
Результат выполнения кода:
42
Пример
Давайте проверим, что метод get не
передает владение: после вызова get
умный указатель все еще содержит объект:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
unique_ptr<int> ptr = make_unique<int>(42);
int* raw = ptr.get();
cout << (ptr ? "owned" : "empty") << endl;
cout << *raw << endl;
return 0;
}
Результат выполнения кода:
"owned"
42
Пример
Давайте проверим, что у пустого unique_ptr
метод get возвращает нулевой указатель:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
unique_ptr<int> ptr;
int* raw = ptr.get();
cout << (raw == nullptr ? "null" : "not null") << endl;
return 0;
}
Результат выполнения кода:
"null"
Смотрите также
-
класс
unique_ptr,
который представляет умный указатель с уникальным владением -
метод
release,
который освобождает владение и возвращает указатель -
метод
reset,
который заменяет управляемый объект -
функция
make_unique,
которая создает объект и возвращает unique_ptr