C ++ std auto_ptr

C ++ std auto_ptr
Wskaźniki to te, które są używane do dostępu do zasobów zewnętrznych do programu tak samo jak pamięć sterta. Kiedy musimy uzyskać dostęp do sterty pamięci, załóżmy, że mamy wartość liczb całkowitą, która jest przechowywana w stosie pamięci, możemy uzyskać do tego dostęp za pomocą wskazówek. Czasami z powodu nieświadomości wskaźniki nie są zwichnięte i mogą powodować wyciek pamięci lub może awansować na cały program. Aby zapobiec tej sytuacji używane są inteligentne wskaźniki, w tym mechanizmie, gdy obiekt jest zniszczony, pamięć jest również uwolniona. Można użyć wielu inteligentnych wskaźników, ale w tym samouczku będziemy omawiać wskaźnik automatycznego.

Ponadto wskaźnik automatycznego jest inteligentnym wskaźnikiem. Wymaga surowego wskaźnika, owija go i zapewnia, że ​​pamięć wskazana przez surowy wskaźnik jest uwalniany z powrotem, gdy obiekt automatycznego wskaźnika wychodzi z zakresu, w dowolnym momencie jeden wskaźnik automatycznego może wskazywać na obiekt. Dlatego za każdym razem, gdy jeden wskaźnik automatycznego jest przypisany do innego wskaźnika automatycznego, własność zostanie przeniesiona do instancji Auto Wskaźnik, który otrzymał zadanie. To samo wydarzy się, gdy skopiowane zostanie automatyczne wskaźnik.

Automatyczne wskaźniki są takie same jak unikalny wskaźnik lub możemy powiedzieć, że unikalnym wskaźnikiem jest nowa wersja wskaźnika automatycznego. Gdy obiekt zostanie zadeklarowany za pomocą wskaźnika automatycznego, przechowuje wskaźnik w jednym obiekcie, który zapewnia, że ​​wskaźnik wychodzi z zakresu, obiekt, na który wskazuje, zostanie automatycznie zniszczony.

Składnia

Składnia deklarowania wskaźnika automatycznego pokazano poniżej:

STD :: auto_ptr P (nowy int);

W powyższej składni „P” znajduje się obiekt automatycznego wskaźnika, który zadeklarowaliśmy, gdzie „typ” jest danych, który będzie zawierać wskaźnik P. Korzystając z nowego słowa kluczowego, przydzieliliśmy stertę pamięci do liczby całkowitej, którą chcemy przechowywać.

Przykład nr 01:

Aby szczegółowo zrozumieć działanie wskaźnika automatycznego, wykonamy przykład, w którym zadeklarujemy wskaźnik automatycznego i wyświetlimy lokalizację pamięci, do której zostanie on odwołany. Przejdźmy teraz do naszego kodu, w którym cały proces będzie wykonywany od stworzenia do alokacji pamięci. Najpierw dołączymy nasz plik nagłówka „iostream” i drugi „pamięć”. „Iostream” to pakiet biblioteki, który umożliwia koderowi wykonywanie różnych operacji wejściowych. Podczas gdy biblioteka „pamięci” jest tą, która obejmuje włączenie alokacji sterty pamięci. Poza główną funkcją zadeklarowaliśmy dwie klasy obiektowe. Pierwszy nazywa się „Autopointer”, który zostanie nazwany za pomocą wskaźnika automatycznego. Wewnątrz obiektu „autopointer” stworzyliśmy funkcję publiczną o nazwie „show ()”.

Celem użycia słowa kluczowego w nim jest udostępnienie go dla wszystkich funkcji w kodzie. W naszej funkcji show () wyświetliśmy komunikat tworzenia wskaźnika, ilekroć wskaźnik jest tworzony dla obiektu „autopointer”, wyświetli wiadomość. Druga klasa obiektowa nazywa się „Autopointer2”, którą stworzyliśmy dla naszego drugiego wskaźnika automatycznego, do którego przeszliśmy również instrukcję „Cout”, wyświetlając wiadomość „Second_Ptr utworzona”.

Teraz przejście do głównej funkcji, która zwraca typ liczby całkowitej. Najpierw deklarujemy wskaźnik automatycznego do obiektu typu „Autopointer” o nazwie „First_ptr”. Korzystając z nowego słowa kluczowego, przydzieliliśmy stertę pamięci do obiektu „Autopointer” w następnym wierszu naszego kodu, którą nazwaliśmy funkcję show za pomocą wskaźnika „First_ptr”. W tym użyliśmy operatora strzałek „->”, w C ++ pozwala nam uzyskać dostęp do elementów z obiektów. Są one używane ze zmiennymi wskaźników, które wskazują na klasę obiektu. Gdy funkcja show jest wywoływana za pomocą „First_ptr”, wyświetli komunikat „First_ptr utworzony”, za pomocą metody get (), która jest dostarczana w celu uzyskania lokalizacji pamięci lub przechowywanych danych w stosie pamięci. Ale w naszym przypadku otrzymamy adres, gdzie stos jest przydzielony „First_ptr”.

Po wyświetleniu lokalizacji „First_ptr” utworzymy kolejny wskaźnik automatycznego o nazwie „Second_ptr” typu obiektu „Autopointer2”. Ponownie, używając nowego wskaźnika, zastrzeżyliśmy lokalizację pamięci. Teraz, przechodząc do następnego wiersza, używamy „second_ptr”, którą nazwaliśmy funkcję „show ()”, którą utworzyliśmy dla obiektu „autopointer2”. Jedną rzeczą do zapamiętania jest to, kiedy deklarujemy wskaźnik automatycznego dla jakiegoś obiektu, otrzyma funkcję obiektu klasy, dla której utworzyliśmy wskaźnik. Nie otrzyma funkcji drugiej klasy obiektów, czy mają one takie same nazwy. Podobnie jak w naszym przypadku w obu klasach obiektów, stworzyliśmy te same funkcje o nazwie „show ()”. Następnie, używając metody get (), uzyskaliśmy dostęp do sterty pamięci za pomocą „second_ptr”, w której przechowywano drugi wskaźnik „second_ptr”. Na końcu kodu zwróciliśmy wartość zerową, co oznacza, że ​​program zostanie pomyślnie wykonany bez błędu i będzie wykonywać pożądane zadanie, dla którego ma on.

#włączać
#włączać
za pomocą przestrzeni nazw Std;
klasa autopointer
publiczny:
void show () cout<< "first_Ptr created" <;
klasa autopointer2
publiczny:
void show () cout<< "second_Ptr created" <;
int main ()

auto_ptrfirst_ptr (nowy autopointer);
First_ptr-> show ();
Cout<auto_ptrsecond_ptr (nowy autopointer2);
second_ptr-> show ();
Cout<powrót 0;

Teraz sprawdźmy dane wyjściowe, które uzyskaliśmy w wyniku napisanego kodu, który jest wyświetlany w fragmencie powyżej. Jak widzimy w tym wyjściu, wyświetliśmy przesłanie tworzenia wskaźników dla obu naszych auto wskaźników. Lokalizacja pamięci dla obu wskazówek została wyświetlona bez żadnych błędów.

Wniosek

W tym samouczku wykazaliśmy wewnętrzne zachowanie wskaźnika automatycznego. Auto wskaźnik został wprowadzony w C ++ 3. Korzystając z przykładów i scenariuszy, wyjaśniliśmy to krótko, aby ułatwić zrozumienie pracy i metodologii tego, jak jest używane. Wskaźniki samochodowe są przestarzałe z powodu ich własności. Dostaje własność w sposób, w jaki dwa wskaźniki w tym samym czasie nie mogą mieć tego samego obiektu.