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

Use C Unique_ptr



Интелигентните указатели се използват за динамично разпределение на ресурса. Много видове интелигентни указатели се използват в C ++ за различни цели, като например auto_ptr , unique_ptr , и shared_ptr . Показалецът auto_ptr е отхвърлен в новата версия на C ++. Уникалният_ptr се използва за замяна на auto_ptr. Обектът на този показалец може да поеме собствеността на показалеца. Обектът на този показалец притежава указателя уникално и никой друг показалец не може да сочи обекта. Unique_ptr изтрива обектите автоматично. Този показалец управлява тези обекти, ако обектите са унищожени, или стойността на обекта е променена или е извикана функцията reset (). Характеристиките на unique_ptr и употребата на този показалец са обсъдени в този урок.

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







Два основни компонента на обекта unique_ptr са предоставени по -долу:



А. Съхранен указател:



Използва се за управление на обектите, създадени от уникален показалец. Създава се по време на създаване на показалец и може да се променя по различни начини.





Б. Съхранен изтривач:

Той приема аргумента на типа съхранен указател, който се използва за изтриване на управлявания обект. Той също така се създава по време на създаване на показалец и може да се променя по различни начини.



Пример 1: Създайте указател обект на клас с конструктор

Начинът за деклариране на уникалните обекти на указател на клас и достъп до метода на класа е чрез използване на обектите, както е показано в следния пример. Клас с конструктор и публичен метод е деклариран в кода. Конструкторът има три аргумента. Първият уникален указател е създаден чрез извикване на конструктора с три стойности на аргумента. The Резултат () метод се извиква от показалеца обект, който изчислява сумата от три стойности на аргумента на конструктора. След това се създава вторият уникален обект на указател без извикване на конструктора, а първият показалец се премества към втория показалец. The Резултат () метод се извиква от втория обект указател.

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

#включва

#включва

usingnamespace std;

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

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

цена<<'Резултатът от сумата с помощта на първия показалец:'<Резултат() <<'н';
//Декларирайте втория показалец
unique_ptr pointer2;
//Преместете първия показалец към втория
pointer2 = преместване(показалец1);

цена<<'Резултатът от сумата с помощта на втория показалец:'<Резултат() <<'н';
return0;
}

Изход:

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

Пример 2: Създайте указател обект на клас с конструктор и деструктор

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

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

#включва

#включва

usingnamespace std;

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

публично:
//Декларирайте конструктора
Клиент(низ n)
{
име = n;
цена<<„Ресурсът е разпределен.н';
}

//Декларирайте метод за отпечатване на името на клиента
невалиден дисплей()
{
цена<<„Името на клиента е:“<<име<<'н';
}

//Обявете деструктора
~ Клиент()
{
цена<<„Ресурсът е унищожен.н';
}
};
int main()
{
//Разпределете обекта Resource, който е собственост на unique_ptr
unique_ptruPointer{нов клиент(„Мир Абас“) };
uPointer->Дисплей();
return0;
}

Изход:

Следният изход ще се появи след изпълнение на горния код:

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

Начинът за проверка на собствеността на уникалния указател е показан в следния пример чрез създаване на два уникални указателя на клас. В кода е деклариран клас с две низови променливи и публичен метод. Методът Book_details () на класа се извиква след създаването на първия уникален обект указател на класа. След това е създаден вторият обект на уникален указател и първият показалец е преместен към втория показалец, който унищожава първия показалец. Собствеността на двата указателя трябва да бъде проверена по -късно.

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

#включва

#включва

usingnamespace std;

//Определете класа
клас книга{

заглавие на низ =„Езикът за програмиране на C ++“;
автор на низ ='Bjarne Stroustrup';

публично:
//Декларирайте метод за отпечатване на подробности за книгата
voidBook_details()
{
цена<<„Име на книгата:“<<заглавие<<'н';
цена<<„Име на автора:“<<автор<<'н';
}
};
int main()
{
//Декларирайте първия показалец
уникален_ptr указател1(нова книга());

указател1->Детайли за книга();
//Декларирайте втория показалец
unique_ptr pointer2;
//Преместете първия показалец към втория
pointer2 = преместване(показалец1);

//Проверете първия показалец
ако (static_cast(показалец1))цена<<„Първият пойнър не е нулевн';
elsecout<<- Първият пойнър е нулевн';
//Проверете втория показалец
ако (static_cast(показалец 2))цена<<- Втората пойнър не е нулеван';
elsecout<<- Втората гачка е нулеван';

return0;
}

Изход:

Следният изход ще се появи след изпълнение на горния код. Според изхода собствеността на първия указател е премахната и съобщението, Първият показалец е нулев е отпечатал за първия показалец. Собствеността на втория указател съществува и съобщението, Първият показалец не е нулев е отпечатал за втория показалец:

Заключение:

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