C ++ std unikalny_ptr

C ++ std unikalny_ptr
Unikalny wskaźnik to inteligentny wskaźnik. Aby omówić, jaki jest unikalny wskaźnik, musimy zrozumieć, czym są inteligentne wskaźniki. Proces dodawania i usuwania elementów można zautomatyzować za pomocą inteligentnych wskazówek. Inteligentne wskazówki oznaczają, że kiedy zadzwonisz teraz, nie musisz dzwonić do Usuń, aw wielu przypadkach z inteligentnymi wskazówkami nie musimy nawet nazywać nowym. Inteligentne wskaźniki są w ten sposób, aby to wszystko się wydarzyło.

Ilekroć utworzony jest inteligentny wskaźnik, automatycznie wywoła nowe i przydzieli stertę pamięci. Następnie, na podstawie którego używasz inteligentnego wskaźnika, pamięć ta automatycznie stanie się wolna. Przejdźmy teraz do naszego głównego tematu, unikalnego wskaźnika. Unikalny wskaźnik zostanie wyeliminowany, gdy zniknie z zakresu. Unikalnych wskazówek nie można skopiować do drugiego wskaźnika, czy jest on z tego samego danych, ponieważ unikalny wskaźnik wskazuje na pamięć. Jeśli unikalny wskaźnik został skopiowany, oznacza to, że dwa wskaźniki wskazują na tę samą stertę pamięci. Dlatego nie możemy kopiować unikalnych wskazówek. Unikalne wskazówki upewniają się, że usuwają z nimi swoje obiekty.

Składnia

Składnia do utworzenia unikalnego wskaźnika jest następująca:

STD :: unikalne_ptr P (nowy int);

Tutaj dynamicznie utworzony obiekt jest również niszczony, gdy sam unikalny wskaźnik zostanie zniszczony.

Przykład nr 01:

Aby zrozumieć unikalne wskaźniki bardziej głębi, podajemy przykład. W tym przykładzie zdefiniowaliśmy strukturę nazwaną osobę. „Osoba” ma konstruktor, który bierze ciąg jako parametr i drukuje wartość. Ma również niszczyciel, który po zniszczeniu wydrukuje „usunięte”, abyśmy mogli zrozumieć, że osoba ta została zniszczona. Wewnątrz głównej metody zadeklarowaliśmy unikalny wskaźnik i przekazaliśmy mu wartość „Jack.".

Teraz ten wskaźnik weźmie „Jack” i przekazuje go do pamięci, na którą wskazuje, że struktura „osoba”. Wartość „Jack” trafi do konstruktora i zostanie wydrukowana. Następnie unikalny wskaźnik automatycznie usunie obiekt i „usunięty!”Na ekranie zostanie wydrukowany. Teraz uruchommy i wykonajmy nasz kod, aby zobaczyć dane wyjściowe.

#włączać
#włączać
za pomocą przestrzeni nazw Std;
struktura

Osoba (ciąg n): Nazwa (n)

Cout<
~ Osoba ()

Cout<< "Deleted!";

Nazwa ciągu;
;
int
główny ()

auto p = make_unique („jack”);
powrót 0;

Nasz kod został pomyślnie wykonany i daje nam oczekiwane wyniki. Unikalny wskaźnik wziął wartość „JACK” i przekazał ją konstruktorowi, ponieważ wskazywał na obiekt struktury „osoby”. Konstruktor wydrukował wartość. Następnie wydrukowane jest „usunięte”. Teraz tutaj wydrukowaliśmy tylko wartość. Ale w scenariuszach w czasie rzeczywistym możemy wykonywać wszystkie operacje, a po wykonaniu operacji obiekt struktury lub klasy sam zostanie zniszczony.

Przykład nr 02:

W tym przykładzie próbowaliśmy szczegółowo wyjaśnić unikalny konstruktor. Próbowaliśmy również stworzyć unikalny wskaźnik inaczej, abyś mógł zrozumieć różne składni i podejścia do tworzenia unikalnych wskazówek. Aby wykonać ten przykład, stworzyliśmy klasę o nazwie „Uniqueptr”. W tej klasie mamy konstruktor tej klasy i destruktor. We wcześniejszym przykładzie wyjaśniliśmy, że możemy wykonać dowolną operację, którą chcemy w konstruktorze. W tym przykładzie staraliśmy się to zrobić, aby dać ci praktyczne doświadczenie.

Tak więc w konstruktorze najpierw wydrukowaliśmy „w konstruktorze”, aby poinformować użytkownika, że ​​jesteśmy obecnie w naszym konstruktorze. Następnie ogłosiliśmy dwie liczby całkowite „x” i „y”, które zawierają wartości odpowiednio „2” i „3”. Następnie zadeklarowaliśmy kolejną zmienną, która jest również liczbą całkowitą: „z”. Podsumowaliśmy lub dodaliśmy wartości „x” i „y” i zapisaliśmy wyjście w liczbie całkowitej „z”. W wierszu 13 wydrukowaliśmy „Operację wykonaną”, a także wydrukowaliśmy na niej wartość „Z”, abyśmy mogli poinformować użytkownika, że ​​operacja jest wykonywana, a wartość po operacji jest następująca.

W naszym destruktorze po prostu wydrukowaliśmy „in destructor”. W głównej metodzie po prostu stworzyliśmy unikalny wskaźnik i przekazaliśmy mu nazwę klasy, aby mógł zrozumieć, na jaką pamięć ma wskazać. Teraz wykonamy nasz kod, aby zweryfikować dane wyjściowe.

#włączać
#włączać
za pomocą przestrzeni nazw Std;
Klasa Uniqueptr

publiczny:
Exiqueptr ()

Cout<<”In constructor”<int x = 2;
int y = 3;
int z = x + y;
Cout<<”Operation Performed = “<
~ Uniqueptr ()

Cout<<”In Destructor”<
;
int main ()

STD :: unikalne_ptr x = std :: unikalne_ptr (nowy UniquEptr);
powrót 0;

Po wykonaniu naszego kodu następujące dane wyjściowe, które otrzymamy z systemu. Jedną rzeczą do wyjaśnienia jest to, że w naszej głównej metodzie nie stworzyliśmy żadnego obiektu klasy, aby uzyskać do niego dostęp. Zamiast tego stworzyliśmy tylko unikalny wskaźnik i wskazaliśmy go na naszą klasę. System wydrukował „w konstruktorze”, co oznacza, że ​​poszedł w konstruktorze, a druga linia wydrukowana wyjaśnia również, że system wykonał operację dodawania na liczbach całkowitych. Na koniec kompilator poruszał się do destrukta, wydrukował wiadomość i zniszczył obiekt klasy. Należy zwrócić uwagę na to, że nie utworzyliśmy ani nie usuwaliśmy stosu pamięci tutaj. To wszystko zostało zrobione przez nasz unikalny wskaźnik.

Wniosek

W tym przewodniku omówiliśmy rodzaj inteligentnego wskaźnika, który jest unikalnym wskaźnikiem. Unikalne wskazówki to inteligentne wskaźniki, które pomagają nam w alokacji pamięci i zarządzaniu pamięcią. Aby zrozumieć unikalne wskazówki, najpierw wyjaśniliśmy inteligentne wskazówki i wyjątkowe wskazówki teoretycznie. Następnie wyjaśniliśmy składnię unikalnych wskazówek. W różnych scenariuszach przeprowadzono wiele przykładów, aby czytelnik praktycznie zrozumiał unikalne wskazówki.