Употреба Ц ++ уникуе_птр

Use C Unique_ptr



Паметни показивачи користе се за динамичку алокацију ресурса. Многе врсте паметних показивача користе се у Ц ++ у различите сврхе, као нпр ауто_птр , уникуе_птр , и схаред_птр . Показивач ауто_птр је застарео у новој верзији Ц ++. Уникуе_птр се користи за замену ауто_птр. Објекат овог показивача може преузети власништво над показивачем. Објекат овог показивача јединствено поседује показивач и ниједан други показивач не може указати на објекат. Уникуе_птр аутоматски брише објекте. Овај показивач управља тим објектима ако су објекти уништени, или се промени вредност објекта или позове функција ресет (). Особине уникуе_птр и употреба овог показивача разматрају се у овом водичу.

Главне компоненте:







Две главне компоненте објекта уникуе_птр су наведене испод:



А. Похрањени показивач:



Користи се за управљање објектима креираним јединственим показивачем. Креира се у време креирања показивача и може се мењати на различите начине.





Б. Похрањени брисач:

Узима аргумент ускладиштеног типа показивача који се користи за брисање управљаног објекта. Такође је креиран у време креирања показивача и може се мењати на различите начине.



Пример 1: Креирање објекта показивача класе са конструктором

Начин декларисања јединствених објеката показивача класе и приступа методи класе је коришћење објеката како је приказано у следећем примеру. Класа са конструктором и јавном методом је декларисана у коду. Конструктор има три аргумента. Први јединствени показивач креиран је позивањем конструктора са три вредности аргумента. Тхе Резултат () метод се позива објектом показивача који израчунава збир три вредности аргумента конструктора. Затим се креира други јединствени објекат показивача без позивања конструктора, а први показивач се премешта у други показивач. Тхе Резултат () метод се позива другим објектом показивача.

//Укључите неопходне библиотеке

#инцлуде

#инцлуде

усингнамеспаце стд;

//Дефинишите класу
разред Додатак{

инт број1, број2, број3;
јавно:
//Прогласите конструктор
Додатак(инт а, инт б, инт ц)
{
број1 = а;
број2 = б;
број3 = ц;
}
//Наведите методу израчунавањазбир
инт Резултат()
{
повратакброј1 + број2 + број3;
}
};
инт маин()
{
//Прогласите први показивач
уникуе_птр показивач1(нови додатак(Четири, пет,55,30));

цена<<'Резултат збира помоћу првог показивача:'<Резултат() <<' н';
//Прогласите други показивач
уникуе_птр поинтер2;
//Померите први показивач на други показивач
показивач2 = померање(показивач1);

цена<<'Резултат збира помоћу другог показивача:'<Резултат() <<' н';
ретурн0;
}

Излаз:

Следећи излаз ће се појавити након извршавања горњег кода. Збир 45, 55 и 30 је 130 који је штампан за оба тачке.

Пример 2: Креирање објекта показивача класе са конструктором и деструктором

Начин декларисања јединственог објекта показивача класе са конструктором и деструктором приказан је у следећем примеру. Класа садржи конструктор са једним аргументом, јавну методу по имену Дисплаи () за вредност променљиве класе и деструктор који ће одштампати поруку за уништавање пре уништавања објекта класе. Метода Дисплаи () се позива након креирања јединственог објекта показивача у коду.

//Укључите неопходне библиотеке

#инцлуде

#инцлуде

усингнамеспаце стд;

//Дефинишите класу
класа Купац
{
стринг стринг;

јавно:
//Прогласите конструктор
Купац(стринг н)
{
наме = н;
цена<<'Ресурс је додијељен. н';
}

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

//Прогласите деструктор
~ Купац()
{
цена<<„Ресурс је уништен. н';
}
};
инт маин()
{
//Доделите објект Ресоурце који је у власништву уникуе_птр
уникуе_птруПоинтер{Нови купац('Мир Аббас') };
уПоинтер->Приказ();
ретурн0;
}

Излаз:

Следећи излаз ће се појавити након извршавања горњег кода:

Пример 3: Проверите показивач након преноса власништва

Начин провере власништва над јединственим показивачем показао се у следећем примеру стварањем два јединствена показивача класе. Класа са две стринг променљиве и јавном методом је декларисана у коду. Метода Боок_детаилс () класе се позива након креирања првог јединственог објекта показивача класе. Затим је креиран други јединствени објекат показивача, а први показивач је премештен на други показивач који уништава први показивач. Власништво над оба показивача требало би касније провјерити.

//Укључите неопходне библиотеке

#инцлуде

#инцлуде

усингнамеспаце стд;

//Дефинишите класу
разред Књига{

стринг стринг =„Програмски језик Ц ++“;
аутор низа ='Бјарне Строуструп';

јавно:
//Наведите начин штампања детаља о књизи
воидБоок_детаилс()
{
цена<<'Назив књиге:'<<наслов<<' н';
цена<<„Име аутора:“<<аутор<<' н';
}
};
инт маин()
{
//Прогласите први показивач
уникуе_птр показивач1(Нова књига());

показивач1->Боок_детаилс();
//Прогласите други показивач
уникуе_птр поинтер2;
//Померите први показивач на други показивач
показивач2 = померање(показивач1);

//Проверите први показивач
ако (статиц_цаст(показивач1))цена<<„Први поинер није ништаван н';
елсецоут<<„Први поинер је ништаван н';
//Проверите други показивач
ако (статиц_цаст(поинтер2))цена<<„Други поинер није ништаван н';
елсецоут<<„Други поинер је ништаван н';

ретурн0;
}

Излаз:

Следећи излаз ће се појавити након извршавања горњег кода. Према излазу, власништво над првим показивачем је уклоњено, а порука, Први показивач је нулл је штампао за први показивач. Власништво над другим показивачем постоји, а порука, Први показивач није нулл је штампао за други показивач:

Закључак:

Сврхе коришћења јединственог показивача у програмирању на Ц ++ описане су у овом водичу коришћењем више примера. Овде су објашњени начини за креирање јединственог показивача, пренос власништва показивача и проверу тренутног власништва показивача како би читаоци лакше упознали употребу јединственог показивача.