Использование C ++ unique_ptr

Use C Unique_ptr



Интеллектуальные указатели используются для динамического распределения ресурса. Многие типы интеллектуальных указателей используются в C ++ для различных целей, например auto_ptr , unique_ptr , а также shared_ptr . Указатель auto_ptr устарел в новой версии C ++. Unique_ptr используется вместо auto_ptr. Объект этого указателя может стать владельцем указателя. Объект этого указателя однозначно владеет указателем, и никакой другой указатель не может указывать на объект. Unique_ptr автоматически удаляет объекты. Этот указатель управляет этими объектами, если объекты уничтожены, или значение объекта изменено, или вызвана функция reset (). В этом руководстве обсуждаются особенности unique_ptr и использование этого указателя.

Основные компоненты:







Ниже представлены два основных компонента объекта unique_ptr:



A. Сохраненный указатель:



Он используется для управления объектами, созданными уникальным указателем. Он создается во время создания указателя, и его можно изменять по-разному.





Б. Сохраненное средство удаления:

Он принимает аргумент типа сохраненного указателя, который используется для удаления управляемого объекта. Он также создается во время создания указателя и может быть изменен разными способами.



Пример 1: Создание объекта указателя класса с помощью конструктора

Чтобы объявить уникальные объекты-указатели класса и получить доступ к методу класса, используйте эти объекты, как показано в следующем примере. В коде объявлен класс с конструктором и общедоступным методом. Конструктор имеет три аргумента. Первый уникальный указатель был создан путем вызова конструктора с тремя значениями аргументов. В Результат() Метод вызывается объектом-указателем, который вычисляет сумму трех значений аргументов конструктора. Затем создается второй объект уникального указателя без вызова конструктора, и первый указатель перемещается на второй указатель. В Результат() Метод вызывается вторым объектом-указателем.

//Включите необходимые библиотеки

#включают

#включают

usingnamespace std;

//Определите класс
добавление класса{

int число1, число2, число3;
общественность:
//Объявить конструктор
Добавление(int a, int b, int c)
{
число1 = а;
число2 = b;
число3 = с;
}
//Объявите метод для вычислениясумма
int Результат()
{
возвращениечисло1 + число2 + число3;
}
};
int main()
{
//Объявить первый указатель
unique_ptr pointer1(новое дополнение(Четыре пять,55,30));

Стоимость<<'Результат суммы с использованием первого указателя:'<Результат() <<' п';
//Объявить второй указатель
unique_ptr pointer2;
//Переместите первый указатель ко второму указателю
указатель2 = переместить(указатель1);

Стоимость<<'Результат суммы с использованием второго указателя:'<Результат() <<' п';
return0;
}

Выход:

Следующий вывод появится после выполнения вышеуказанного кода. Сумма 45, 55 и 30 составляет 130, которые были напечатаны для обоих указателей.

Пример 2: Создание объекта указателя класса с помощью конструктора и деструктора

Способ объявления уникального объекта-указателя класса с конструктором и деструктором показан в следующем примере. Класс содержит конструктор с одним аргументом, открытый метод с именем Display () для значения переменной класса и деструктор, который напечатает сообщение об уничтожении перед уничтожением объекта класса. Метод Display () вызывается после создания уникального объекта-указателя в коде.

//Включите необходимые библиотеки

#включают

#включают

usingnamespace std;

//Определите класс
класс Клиент
{
имя строки;

общественность:
//Объявить конструктор
Покупатель(строка n)
{
name = n;
Стоимость<<«Ресурс выделен. п';
}

//Объявить метод печати имени клиента
void Display()
{
Стоимость<<«Имя заказчика:»<<имя<<' п';
}

//Объявить деструктор
~ Клиент()
{
Стоимость<<«Ресурс уничтожен. п';
}
};
int main()
{
//Выделите объект Resource, которым владеет unique_ptr
unique_ptruPointer{новый покупатель('Мир Аббас') };
uPointer->Отображать();
return0;
}

Выход:

После выполнения вышеуказанного кода появится следующий вывод:

Пример 3: проверка указателя после передачи права собственности

Способ проверки принадлежности уникального указателя показан в следующем примере путем создания двух уникальных указателей класса. В коде объявлен класс с двумя строковыми переменными и общедоступный метод. Метод класса Book_details () вызывается после создания первого уникального объекта-указателя класса. Затем был создан второй объект уникального указателя, и первый указатель был перемещен на второй указатель, который уничтожает первый указатель. Право собственности на оба указателя следует проверить позже.

//Включите необходимые библиотеки

#включают

#включают

usingnamespace std;

//Определите класс
учебник{

строка title ='Язык программирования C ++';
строка author ='Бьярне Страуструп';

общественность:
//Объявить метод печати сведений о книге
voidBook_details()
{
Стоимость<<'Название книги:'<<заглавие<<' п';
Стоимость<<'Имя автора: '<<автор<<' п';
}
};
int main()
{
//Объявить первый указатель
unique_ptr pointer1(новая книга());

указатель1->Book_details();
//Объявить второй указатель
unique_ptr pointer2;
//Переместите первый указатель ко второму указателю
указатель2 = переместить(указатель1);

//Проверить первый указатель
если (static_cast(указатель1))Стоимость<<'Первый указатель не равен нулю п';
elsecout<<'Первый указатель равен нулю п';
//Проверьте второй указатель
если (static_cast(указатель2))Стоимость<<'Второй указатель не равен нулю п';
elsecout<<'Второй указатель равен нулю п';

return0;
}

Выход:

Следующий вывод появится после выполнения вышеуказанного кода. Согласно выходным данным, право собственности на первый указатель было удалено, а сообщение Первый указатель нулевой напечатал для первого указателя. Право собственности на второй указатель существует, и сообщение, Первый указатель не равен нулю напечатал для второго указателя:

Заключение:

Цели использования уникального указателя в программировании на C ++ были описаны в этом руководстве с использованием нескольких примеров. Способы создания уникального указателя, передачи права собственности на указатель и проверки текущего владения указателем были объяснены здесь, чтобы помочь читателям правильно понять использование уникального указателя.