C ++ STD BAD_WEAK_PTR

C ++ STD BAD_WEAK_PTR
Przed zrozumieniem koncepcji klasy BAD_WEAK_PTR musimy wiedzieć, jakie są wspólne wskaźniki i słabe wskaźniki. Udostępnione wskaźniki to te, w których możemy skopiować wskaźnik w różnych zmiennych. Można powiedzieć, że wspólne wskaźniki mają wspólną własność, w której sam słaby wskaźnik nie ma żadnej własności: jako referencje przyjmuje własność ze wspólnych wskaźników. BAD_WEAK_PTR to klasa wbudowana, która jest dostarczana przez standardowe c++. Jest to ten, który służy do wyrzucania obiektu jako wyjątku przez konstruktor wspólnych wskaźników i bierze słaby wskaźnik jako argument. Sam słaby wskaźnik odnosi się do usuniętego obiektu.

Składnia:

Poniżej pokazano składnię do tworzenia wyjątku klasowego BAD_WEAK_PTR.

klasa BAD_WEAK_PTR: PUBLIC STD :: wyjątek
BAD_WEAK_PTR ();
const char *co () rzut ();
;

Ta klasa określa wyjątek, który możemy rzucić za pomocą konstruktora wspólnego wskaźników, który trzyma argument typu słabego wskaźnika. W składni powyższym wyjątkiem jest błąd, który będziemy rzucić, gdy pojawia się zły słaby wskaźnik. Wewnątrz funkcji klasowej zadeklarowaliśmy dwie funkcje stałego postaci danych, które są metodą „co ()” i „rzut ()”. Funkcja „What ()” służy do zwrócenia zakończonego znaku, która identyfikuje używany wyjątek, a „rzut ()” służy do rzucenia wyjątku, gdy kompilator wykrywa problem. Wartość zwracana dla złego słabego wskaźnika jest ciągiem zerowym z wyjaśnieniem.

Przykład nr 01:

Wykonajmy teraz przykład BAD_WEAK_PTR, aby sprawdzić, jak to działa. Pierwszym krokiem do wykonania w tym jest włączenie plików nagłówka „iostrem” i „pamięci”. „Iostream” zapewnia możliwość wykonywania operacji wejściowych; podczas gdy „pamięć” pozwala nam wykonywać różne operacje związane z alokacją pamięci itp.

Teraz, w głównej funkcji, zadeklarowaliśmy wspólny wskaźnik typu liczb całkowitych o nazwie „PTR”. Do tego wskaźnika przekazaliśmy wartość całkowitą „42” i używając nowego słowa kluczowego, przydzieliliśmy ją do sterty pamięci. A następnie, używając słabego wskaźnika, zadeklarowaliśmy BAD_WEAK_PTR o nazwie „Bad_weak_pointer”, do którego odwoływaliśmy się do współdzielonego wskaźnika „PTR”. Teraz, używając słowa kluczowego RESET (), zresetujemy bity w dostarczonym indeksie „ptr” do null lub „0”. Następnie wywołamy instrukcję TRY , która służy do wykonania czegoś zdefiniowanego przez użytkownika. Wewnątrz zadeklarowaliśmy kolejny wspólny wskaźnik o nazwie „P2”, który będzie utrzymywał zły słaby wskaźnik „BAD_WEAK_POINTER”. Teraz nazywamy instrukcję catch (), która pozwoli nam zdefiniować blok wykonania, gdy wystąpi błąd. Do instrukcji Catch () przekazaliśmy BAD_WEAK_PTR i „ERR” jako parametr. „ERR” służy do przechowywania błędu, który wystąpi w tym programie. Wewnątrz zmiennej „Err” Curly Braces wyświetli rodzaj błędu, który występuje w tym kodzie za pomocą metody What (), która jest używana do uzyskania instrukcji identyfikującej błąd.

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

std :: shared_ptr ptr (nowy int (42));
std :: słabe_ptr BAD_WEAK_POINTER (ptr);
ptr.Resetowanie();
próbować
std :: shared_ptr p2 (bad_weak_pointer);
catch (const std :: Bad_weak_ptr & err)
STD :: Cout << err.what() << '\n';

Teraz sprawdźmy nasze dane wyjściowe, w którym wyświetlono błąd, który wystąpił z powodu złego słabego wskaźnika.

Przykład nr 02:

W tym przykładzie spróbujemy wykonać inny program BAD_WEAK_PTR, w którym utworzymy obiekt współdzielonego typu wskaźnika i wywołamy konstruktor i destruktor. Zapewnijmy szczegółowy widok kodu, który zamierzamy wykonać. Po uwzględnieniu tych samych plików nagłówka, które zawarliśmy w powyższym przykładzie. Utworzymy obiekt „BD_PTR” za pomocą struktury. I wywołane enabled_shared_from_this dla obiektu BD_PTR, który umożliwia obiekt BD_PTR, który jest zarządzany przez udostępniony wskaźnik o nazwie „BD_PTR”.

Wewnątrz tego obiektu nazwiemy konstruktor „BD_PTR” i destruktora. Ponadto, w obu tych funkcjach, przekazujemy instrukcję, która zostanie wyświetlona podczas udanego wykonania. A także stworzył funkcję tego obiektu „BD-PTR” o nazwie „getBdptr”, który zwróci shared_ptr, który będzie udostępniać własność „this”. Metoda „shared_from_this ()” służy do umożliwienia obiektu zarządzanego wskaźnik współużytkowany, umożliwia utworzenie instancji dla obiektu współdzielonego wskaźnika. Teraz, przejście do naszej głównej funkcji, w której nazwaliśmy instrukcję TRY , w której zadeklarowaliśmy zmienną o nazwie „F” obiektu „BD_PTR”, do której przypisaliśmy stertę pamięci za pomocą „nowego” słowa kluczowego.

Stworzyliśmy również jeszcze jeden współdzielony wskaźnik typu „BD_PTR” o nazwie „SP”, do którego przypisaliśmy metodę getBdptr (), wskazując za pośrednictwem zmiennej „f” obiektu typu. Korzystając z operatora „->”, uzyskaliśmy dostęp do elementu struktury dla zmiennej „F”. Do metody połowowej przekazaliśmy stały typ BAD_WEAK_PTR o nazwie „Badweakptr”, co oznacza, że ​​jeśli wystąpi wyjątek Bad_weak_ptr, wyświetli wewnętrzny kod, który napisaliśmy w klamrach, w których wyświetli nazwę wyjątku, który ma miejsce a na koniec wychodzimy z kodu z -1.

#włączać
#włączać
struct bd_ptr: public std :: enable_shared_from_this
bd_ptr () std :: cout << "bad pointer constructor\n";
~ bd_ptr () std :: cout << "bad pointer destructor\n";
std :: shared_ptr getBdptr () return shared_from_this ();
;
int main ()

próbować

bd_ptr *f = new bd_ptr;
std :: shared_ptr sp = f-> getBdptr ();

Catch (const std :: BAD_WEAK_PTR & BADWEAKPTR)

STD :: Cout << badweakptr.what();
wyjście (-1);

powrót 0;

W poniższym fragmencie z powodzeniem wykonaliśmy przesłanie stworzenia konstruktora, co oznacza, że ​​nasz konstruktor został pomyślnie tworzony. Ale destruktor nie wykonuje się, ponieważ rzuciliśmy wyjątek dla złego słabego wskaźnika. Wyświetlał więc wewnętrzny kod, który napisaliśmy w funkcji połowowej, która wyświetlała rodzaj wystąpienia błędu.

Wniosek

W tym przewodniku zbadaliśmy wyjątek, który jest BAD_WEAK_PTR, który służy do wyrzucenia wyjątku i zwraca typ wiadomości, który występuje w momencie wykonania. Przeprowadziliśmy różne przykłady, aby wyjaśnić koncepcję tego wyjątku i sposób, w jaki jest ono używane w kodzie. Staraliśmy się jak najlepiej wyjaśnić działanie BAD_WEAK_PTR.