C ++ std słabe_ptr

C ++ std słabe_ptr
Warunkiem studiowania słabego wskaźnika jest to, że powinniśmy wiedzieć o unikalnych wskaźnikach i wspólnych wskaźnikach. Unikalny wskaźnik ma wyjątkową własność. Trzyma zarządzane obiekty i nie pozwala nikomu obsługiwać tych obiektów. Załóżmy, że mamy obiekt o nazwie „P”, którym zarządza unikalny wskaźnik. Następnie nie możemy skopiować tego wskaźnika. W drugim przypadku dla współdzielonego wskaźnika mamy również „p”, ale używamy wspólnego wskaźnika. Tym razem możesz skopiować ten udostępniony wskaźnik w kilku różnych zmiennych, a my użyjemy liczby referencji, aby policzyć, ile inteligentnych wskazówek używa lub wskazuje na ten konkretny obiekt zarządzany.

Teraz możemy powiedzieć, że unikalny wskaźnik dotyczy wyjątkowej własności. Wspólny wskaźnik służy do wspólnej własności. A słaby wskaźnik jest przeznaczony dla osób niebędących własnością. Słaby wskaźnik jest również inteligentnym wskaźnikiem; W ogóle nie będzie uczestniczyć w własności. Jest to odniesienie do obiektu zarządzanego przez wspólny wskaźnik. Teraz jedną rzeczą, która może utknąć w naszym umyśle, jest to, że jeśli słaby wskaźnik nie ma żadnej własności jak unikalny lub wspólny wskaźnik, w jaki sposób ten słaby wskaźnik zostanie załatwiony? Wskaźnik nic nie ma, pobiera zarządzany obiekt ze wspólnych wskaźników. Są używane do przełamania okrągłej zależności współdzielonych.

Składnia:

Składnia do zastosowania słabego wskaźnika w programie jest następująca:

STD :: słabe_ptr P (nowy int);

W podanej składni typu jest typ danych, który kontroluje słaby wskaźnik.

Przykład 1:

Aby lepiej zrozumieć słaby wskaźnik, najpierw dajmy przykład, aby łatwiej było nam zrozumieć, jak to działa. W tym przykładzie tworzymy słaby wskaźnik za pomocą współdzielonych wskaźników i tworzymy liczbę odniesień za pomocą słabego wskaźnika. Jak wcześniej dyskutowaliśmy, sam słaby wskaźnik nie ma własności; Własność innych wskazówek wymaga złamania okrągłej zależności obiektów. Teraz, przechodząc w kierunku naszego kodu, w którym najpierw dołączamy dwa pliki nagłówka - pierwszym plik nagłówka jest „pamięć”, a drugi plik nagłówka jest „iostream”. „Iostream” służy do umożliwienia koderowi wykonywania operacji we/wy, podczas gdy „pamięć” jest biblioteką używaną do zarządzania pamięcią dynamiczną.

Następnie przechodzimy do głównej funkcji, w której definiujemy wspólny wskaźnik typu liczb całkowitych i nazywamy wskaźnik „shr_ptr_a”. Korzystając z „nowego” operatora, przydzielamy pamięć na stercie dla Int „12”. Teraz deklarujemy słaby wskaźnik typu liczb całkowitych i nazywamy go „WK_PTR”, do którego przekazujemy wspólny wskaźnik. Oznacza to, że zawiera odniesienie liczby całkowitej „12”. Po pomyślnym ogłoszeniu, wydrukujemy liczbę zliczeń, że słaby wskaźnik jest wywoływany za pomocą „Use_count ()”, który służy do zwrócenia liczby instancji współdzielonych wskaźników, które zarządzają bieżącym obiektem. W tym przykładzie wykonujemy ten krok 3 razy, tworząc trzy wspólne obiekty. Na końcu kodu zwracamy wartości zerowe.

#włączać
#włączać
int main ()

std :: shared_ptr shr_ptr_a (new int (12));
STD :: słabe_ptr WK_PTR (shr_ptr_a);
STD :: Cout << "Total Number of weak pointers : "
<< wk_ptr.use_count() << std::endl;
std :: shared_ptr shr_ptr_b (shr_ptr_a);
STD :: Cout << "Total Number of weak pointers : "
<< wk_ptr.use_count() << std::endl;
std :: shared_ptr shr_ptr_c (shr_ptr_a);
STD :: Cout << "Total Number of weak pointers : "
<< wk_ptr.use_count() << std::endl;
zwrot (0);

Teraz sprawdźmy wyjście kodu wyświetlanego w następującym fragmencie, w którym drukujemy liczbę tworzonych referencji. Po utworzeniu każdego odniesienia drukujemy na to liczenie. Dla pierwszej wyjścia było to jedno, dla drugiej wyjścia było 2, a dla ostatniego wyjścia było 3. Oznacza to, że łączne trzy odniesienia są tworzone za pomocą słabego wskaźnika.

Przykład 2:

Wykonujemy kolejny przykład, w którym tworzymy dwie klasy i niszczymy je za pomocą słabego wskaźnika. Za każdym razem, gdy uzyskujemy dostęp do dowolnego obiektu lub usuwamy go w dowolnym momencie przez dowolny inteligentny wskaźnik, do śledzenia tego słabego wskaźnika jest używany słaby wskaźnik. Jest przekształcany w współdzielony wskaźnik jako tymczasowa własność. Jeśli chcemy zniszczyć oryginalny wspólny wskaźnik, życie obiektu jest przedłużane, dopóki nie zniszczymy tymczasowego współdzielonego wskaźnika.

Teraz przejdźmy do kodu, w którym najpierw dołączamy pliki nagłówka. Przed zanurzeniem się w głównej funkcji deklarujemy dwie klasy - pierwsza to „klasa_a”, a druga to „klasa_b”. Wewnątrz „class_a” najpierw definiujemy słaby wskaźnik o nazwie „BPTR”, przekazując „klasę_b” jako parametr. Następnie nazywamy konstruktorem i destruktorem dla „klasy_a”. Powtarzamy te same kroki dla „class_b”, w których definiujemy słaby wskaźnik i przekazujemy „klasę_a” jako parametr. Konstruktor wyświetla przesłanie tworzenia klasy. Po wywołaniu funkcji niszczenia wyświetla klasę zniszczoną wiadomość.

Następnie wskakujemy do głównej funkcji, w której deklarujemy wspólne wskaźniki nazywające „a” i „b”, do której przypisujemy funkcję „make_shared”, w której przechodzimy obie klasy jako parametr. Funkcja „Make_shared” służy do alokacji i tworzenia dowolnego rodzaju obiektu, przekazując danych jako argument. Zwraca obiekt wspólnego wskaźnika, który jest właścicielem obiektu i przechowuje go. Wreszcie, używając wskaźników współdzielonych „A” i „B”, indeksujemy je, aby uzyskać dostęp do indeksu pamięci za lokalizacjami wskazanymi przez „BPTR” i „APTR”. Oznacza to, że przypisujemy wspólne obiekty wskaźników do słabego wskaźnika.

#włączać
#włączać
klasa_b;
klasa klasa_a

publiczny:
STD :: słabe_ptrBPTR;
klasa A()
STD :: Cout << "class_a created sucessfully" << std::endl;

~ class_a ()
STD :: Cout << "class_a destroyed sucessfully" << std::endl;

;
klasa_b

publiczny:
STD :: słabe_ptrAPTR;
class_b ()
STD :: Cout << "class_b created sucessfull" << std::endl;

~ class_b ()
STD :: Cout << "class_b destroyed sucessfully" B-> aptr = a;

W poniższym fragmencie wyświetlane jest wyjście naszego kodu, w którym możemy sprawdzić, czy zarówno klasa_ i klasa_.

Wniosek

W tym artykule zbadaliśmy użycie słabych wskaźników, jak działają i cel wykorzystania słabych wskaźników przy użyciu wielu przykładów, w tym kodu i wyjścia. Słabe wskaźniki odgrywają istotną rolę w C++. W koordynacji ze wspólnymi wskaźnikami słabe wskaźniki pomagają jednocześnie deklarować lub inicjować zoptymalizowany cykl w celu uzyskania elementów. Pomagają również w pozyskiwaniu zasobów.