Użycie C ++ unikalne_ptr

Użycie C ++ unikalne_ptr
Inteligentne wskaźniki służą do dynamicznego alokacji zasobów. Wiele rodzajów inteligentnych wskaźników jest używanych w C ++ do różnych celów, takich jak auto_ptr, unikalne_ptr, I shared_ptr. Wskaźnik auto_ptr jest przestarzały w nowej wersji c++. Unikalny_ptr jest używany w wymianie auto_ptr. Obiekt tego wskaźnika może przejąć własność wskaźnika. Obiekt tego wskaźnika jest wyjątkowo właścicielem wskaźnika i żaden inny wskaźnik nie może wskazywać na obiekt. Unikalny_ptr usuwa obiekty automatycznie. Ten wskaźnik zarządza tymi obiektami, jeśli obiekty zostaną zniszczone lub wartość obiektu jest zmieniana lub wywoływana jest funkcja reset (). Funkcje unikalnego_ptr i zastosowania tego wskaźnika są omówione w tym samouczku.

Główne komponenty:

Dwa główne elementy obiektu unikalnego_ptr podano poniżej:

A. Przechowywany wskaźnik:

Służy do zarządzania obiektami tworzonymi przez unikalny wskaźnik. Jest tworzony w momencie tworzenia wskaźnika i można go zmienić na różne sposoby.

B. Przechowywany delener:

Bierze argument typu przechowywanego wskaźnika, który służy do usuwania zarządzanego obiektu. Jest również tworzony w momencie tworzenia wskaźnika i można go zmienić na różne sposoby.

Przykład 1: Utwórz obiekt wskaźnika klasy z konstruktorem

Sposobem deklarowania unikalnych obiektów wskaźników klasy i dostępu do metody klasy jest użycie obiektów, jak pokazano w poniższym przykładzie. Klasa z konstruktorem i metodą publiczną została ogłoszona w kodzie. Konstruktor ma trzy argumenty. Pierwszy unikalny wskaźnik został stworzony przez wywołanie konstruktora z trzema wartościami argumentów. Wynik() Metoda jest wywoływana przez obiekt wskaźnika, który oblicza sumę trzech wartości argumentów konstruktora. Następnie drugi unikalny obiekt wskaźnika jest tworzony bez wywoływania konstruktora, a pierwszy wskaźnik jest przenoszony do drugiego wskaźnika. Wynik() Metoda jest nazywana przez drugi obiekt wskaźnika.

// Dołącz niezbędne biblioteki
#włączać
#włączać
Używanie STDNamespace STD;
// Zdefiniuj klasę
Dodatek klasowy
Int Number1, Number2, Number3;
publiczny:
// zadeklaruj konstruktora
Dodanie (int a, int b, int c)

Number1 = a;
numer2 = b;
numer3 = c;

// Deklaruj metodę obliczenia sumy
int wynik ()

Zwraca numer 1 + numer 2 + numer3;

;
int main ()

// zadeklaruj pierwszy wskaźnik
unikalny wskaźnik_ptr (nowy dodatek (45, 55, 30));
Cout<<"The result of sum using the first pointer :"// zadeklaruj drugi wskaźnik
unikalne_ptr wskaźnik2;
// Przesuń pierwszy wskaźnik do drugiego wskaźnika
wskaźnik2 = ruch (wskaźnik1);
Cout<<"The result of sum using the second pointer :"return0;

Wyjście:

Następujące dane wyjściowe pojawią się po wykonaniu powyższego kodu. Suma 45, 55 i 30 to 130, które zostały wydrukowane dla obu wskazówek.

Przykład 2: Utwórz obiekt wskaźnika klasy z konstruktorem i destruktorem

Sposób ogłoszenia unikalnego obiektu wskaźnika klasy z konstruktorem i destruktorem został pokazany w poniższym przykładzie. Klasa zawiera konstruktor z jednym argumentem, metodę publiczną o nazwie display () do wartości zmiennej klasy oraz destruktor, który wydrukuje komunikat niszczenia przed zniszczeniem obiektu klasy klasy. Metoda display () jest wywoływana po utworzeniu unikalnego obiektu wskaźnika w kodzie.

// Dołącz niezbędne biblioteki
#włączać
#włączać
Używanie STDNamespace STD;
// Zdefiniuj klasę
Klasy klientów

Nazwa ciągu;
publiczny:
// zadeklaruj konstruktora
Klient (ciąg n)

Nazwa = n;
Cout<<"The resource is allocated.\n";

// zadeklaruj metodę wydrukowania nazwy klienta
void wyświetlacz ()

Cout<<"The name of the customer is: "<< name <<"\n";

// zadeklaruj destruktora
~ Klient ()

Cout<<"The resource is destroyed.\n";

;
int main ()

// przydziel obiekt zasobów, który jest własnością unikalnego_ptr
unikalne_ptrupointer new Customer („miR Abbas”);
upointer-> display ();
return0;

Wyjście:

Następujące dane wyjściowe pojawią się po wykonaniu powyższego kodu:

Przykład 3: Sprawdź wskaźnik po przeniesieniu własności

Sposób sprawdzenia własności unikalnego wskaźnika pokazano w poniższym przykładzie, tworząc dwa unikalne wskazówki klasy klasy. Klasa z dwiema zmiennymi ciągami i metodą publiczną została zadeklarowana w kodzie. Metoda klasy_details () klasy nazywa się po utworzeniu pierwszego unikalnego obiektu wskaźnika klasy. Następnie utworzono drugi unikalny obiekt wskaźnika, a pierwszy wskaźnik został przeniesiony do drugiego wskaźnika, który niszczy pierwszy wskaźnik. Własność obu wskaźników powinna zostać sprawdzona później.

// Dołącz niezbędne biblioteki
#włączać
#włączać
Używanie STDNamespace STD;
// Zdefiniuj klasę
Książka klasowa
String title = "The C ++ Languaging Janguge";
String autor = "Bjarne Stroustrup";
publiczny:
// Deklaruj metodę drukowania szczegółów książki
voidbook_details ()

Cout<<"Book Name: "<< title <<"\n";
Cout<<"Author Name: "<< author <<"\n";

;
int main ()

// zadeklaruj pierwszy wskaźnik
unikalne_ptr wskaźnik1 (nowa książka ());
Pointer1-> book_details ();
// zadeklaruj drugi wskaźnik
unikalne_ptr wskaźnik2;
// Przesuń pierwszy wskaźnik do drugiego wskaźnika
wskaźnik2 = ruch (wskaźnik1);
// Sprawdź pierwszy wskaźnik
if (static_cast (wskaźnik1)) cout<<"The first poiner is not null\n";
Elsecout<<"The first poiner is null\n";
// Sprawdź drugi wskaźnik
if (static_cast (wskaźnik2))<<"The second poiner is not null\n";
Elsecout<<"The second poiner is null\n";
return0;

Wyjście:

Następujące dane wyjściowe pojawią się po wykonaniu powyższego kodu. Zgodnie z wynikami własność pierwszego wskaźnika została usunięta, a przesłanie „”Pierwszy wskaźnik jest NULL”Wydrukowano dla pierwszego wskaźnika. Istnieje własność drugiego wskaźnika i przesłanie „Pierwszy wskaźnik nie jest zerowy”Wydrukowano dla drugiego wskaźnika:

Wniosek:

Cele zastosowania unikalnego wskaźnika w programowaniu C ++ zostały opisane w tym samouczku za pomocą wielu przykładów. Sposoby utworzenia unikalnego wskaźnika, przeniesienia własności wskaźnika i sprawdzenie obecnej własności wskaźnika zostały tutaj wyjaśnione, aby pomóc czytelnikom prawidłowe poznać unikalny wskaźnik.