Inteligentny wskaźnik w C ++

Inteligentny wskaźnik w C ++
Inteligentny wskaźnik to bardzo ważna koncepcja wprowadzona w C++. Inteligentny wskaźnik jest używany w C ++ do rozwiązania problemu używania normalnego wskaźnika. Aby usunąć wady normalnego wskaźnika, w C istnieje inteligentny wskaźnik++.

Inteligentny wskaźnik vs zwykłego wskaźnika

Dwa główne problem używania regularnych wskaźników to:

A. Regularny wskaźnik nie może skutecznie zarządzać wykorzystaniem pamięci.

B. Nie może zwolnić obiektu pamięci, gdy nie są one używane w programie.

C. Ponieważ normalny wskaźnik nie może przydzielić pamięci obiektu, jeśli wskaźnik zostanie usunięty z programu, adres obiektu pamięci, który jest wskazany przez wskaźnik. W rezultacie, wyciek pamięci dzieje się.

W tym celu używamy inteligentnego wskaźnika nad zwykłym wskaźnikiem. Zalety inteligentnych wskazówek w stosunku do regularnych wskazówek to:

A. Zarządza pamięcią automatycznie.

B. Wydał pamięć obiektu, gdy nie są one używane w programie.

C. DE przydziela pamięć obiektu, gdy wskaźnik wychodzi z zakresu w programie.

D. Inteligentny wskaźnik jest używany w C ++ do alokacji obiektów, przemieszczania się w różnych typach struktury danych i zarządza różnymi typami wyrażenia Lambda do przekazywania funkcji.

mi. To sprawia, że ​​nasz program jest bardzo bezpieczny i bezpieczny. W rezultacie program staje się bardzo łatwy do zrozumienia i staje się łatwiejszy do debugowania.

Różne rodzaje inteligentnych wskaźników

Zwykle istnieją trzy rodzaje inteligentnych wskaźników dostępnych w C++. Oni są:

A. Unikalny

B. Wspólny

C. Słaby.

Omówimy każdy z nich poniżej.

A. Unikalny wskaźnik

A. Unikalny wskaźnik trzyma wskaźnik do obiektu. Uwalnia pamięć obiektu, gdy wychodzi z zakresu.

B. Jedną z unikalnych cech unikalnego wskaźnika jest to, że w pamięci jest tylko jedna kopia obiektu. Żadne inne zasoby nie mogą wskazywać na ten konkretny obiekt.

C. Jeśli wiele zasobów jest dostępnych dla jednego obiektu w kodzie, wystąpi błąd czasu kompilacji.

Przykład programowania 1:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
Klasa Square
strona int;
publiczność:
Square (int s)

strona = s;

Int obszar ()

powrót (strona*strona);

;
int main ()

unikalne_ptr p1 (nowy kwadrat (2));
Cout< area () <powrót 0;

Wyjście:

Wyjaśnienie:

Tutaj stworzyliśmy klasę o nazwie Square. Wewnątrz klasy zadeklarowana jest strona zmienna i wywołuje konstruktor do zainicjowania wartości zmiennej bocznej. Teraz zdefiniowaliśmy funkcję o nazwie obszar, który zwraca swoją wartość powierzchni.

Wewnątrz funkcji main () zadeklarowaliśmy unikalny wskaźnik o nazwie unikalny_ptr. Teraz utworzyliśmy wskaźnik P1, który wskazuje obiekt kwadratu klasy i wewnątrz jego nawiasu, przekazujemy wartość 2.

Teraz, jeśli wydrukujemy obszar przez wskaźnik P1, jak P1-> Area (), pokazuje, że obszar kwadratu wynosi 4.

B. Udostępniony wskaźnik

A. Udostępniony wskaźnik można zastosować w programie, gdy chcemy przypisać jeden wskaźnik do wielu zasobów obiektów.

B. Wspólny wskaźnik to adres generowany przez Smart Wskaźnik, który można użyć do przechowywania i przekazywania odniesienia poza zakres funkcji.

C. Jest to bardzo przydatne w OOP (program zorientowany na obiekt). Aby przechowywać wskaźnik jako zmienną członkowską, używany jest współdzielony wskaźnik.

D. Udostępniony wskaźnik nie zostanie usunięty, dopóki wszystkie zasoby nie wykonają zadania.

Przykład programowania 2:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
Klasa Square
strona int;
publiczność:
Square (int s)

strona = s;

Int obszar ()

powrót (strona*strona);

;
int main ()

shared_ptrp1 (nowy kwadrat (2));
// Wprowadzenie wspólnego wskaźnika;
shared_ptrp2;
P2 = p1;
CoutCoutpowrót 0;

Wyjście:

Wyjaśnienie:

Ten przykład programowania 2 jest kontynuacją przykładu programowania 1. Wewnątrz funkcji Main () wprowadziliśmy współdzielony wskaźnik. Korzystając z wskaźnika P1, stworzyliśmy obiekt klasy kwadratowej. Ten sam obiekt jest wskazany przez wartość p2-> obszar () i p1-> obszar (). Oba pokazują obszar kwadratu to 4.

C. Słaby wskaźnik

A. Słaby wskaźnik jest szczególnym przypadkiem wskaźnika do użycia ze wspólnymi wskaźnikami.

B. Słaby wskaźnik ma dostęp do obiektu, który jest własnością jednego lub więcej instancji współdzielonej.

C. To nie jest część liczenia referencyjnego.

D. Używamy słabego wskaźnika w programie, gdy chcemy obserwować obiekt, ale nie wymagamy, aby pozostał przy życiu.

Przykład programowania 3:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
Klasa Square
strona int;
publiczność:
Square (int s)

strona = s;

Int obszar ()

powrót (strona*strona);

;
int main ()

shared_ptrp1 (nowy kwadrat (2));
słabe_ptrw1;
słabe_ptr w2 (w1);
słabe_ptr w3 (p1);
Cout<< "w1:" << w1.use_count()<Cout<< "w2:" << w2.use_count()<Cout<< "w3:" << w3.use_count()<powrót 0;

Wyjście:

Wyjaśnienie:

Ten przykład programowania 3 jest kontynuacją przykładu programowania 2. W tym miejscu wprowadziliśmy udostępniony wskaźnik o nazwie shared_ptr i utworzyliśmy wskaźnik P1, aby wskazać obiekt klasy kwadratowej. Teraz użyliśmy słabego wskaźnika, słabego_ptr, który wskazuje W1 i W2. Wewnątrz W2 mijamy W1. Stworzyliśmy kolejny słaby wskaźnik W3, w którym przekazujemy wskaźnik P1.

Teraz, jeśli wydrukujemy wszystkie W1.użyj_count () i W2.Use_count (), wyświetli się wynik.

Wniosek

Omawiając szczegółowo o koncepcji i zastosowaniach inteligentnego wskaźnika, doszliśmy do wniosku, że w C ++ wprowadzono inteligentny wskaźnik, aby usunąć wady normalnego wskaźnika. Za pośrednictwem inteligentnego wskaźnika możemy bardzo skutecznie zarządzać różnymi rodzajami właścicieli i zasobami obiektu. Mamy nadzieję, że ten artykuł jest pomocny. Sprawdź inne artykuły w Linux, aby uzyskać więcej wskazówek i samouczków.