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_ptrP (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_ptrshr_ptr_a (new int (12));
STD :: słabe_ptrWK_PTR (shr_ptr_a);
STD :: Cout << "Total Number of weak pointers : "
<< wk_ptr.use_count() << std::endl;
std :: shared_ptrshr_ptr_b (shr_ptr_a);
STD :: Cout << "Total Number of weak pointers : "
<< wk_ptr.use_count() << std::endl;
std :: shared_ptrshr_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.