C ++ enabled_shared_from_this

C ++ enabled_shared_from_this
Inteligentny wskaźnik umożliwia nam odzyskanie udostępnionego wskaźnika z tego wskaźnika w funkcji członka. Aby to zrobić, używana jest enable_shared_from_tej klasie. Jest to klasa podstawowa, która umożliwia koderze umożliwienie obiektu na generowanie dodatkowych instancji dla współdzielonego wskaźnika lub możemy powiedzieć, że umożliwia dzielenie się własnością udostępnionych wskaźników. Włączona_shared_from_This jest powszechną techniką, która pozwala zarządzanego wspólnego obiektu PTR na samodzielne uzyskanie wspólnego PTR. Najprawdopodobniej jest używany, gdy wywołujemy funkcję z funkcji członka. Przekazujemy „to” jako argument tej funkcji.

Przekazanie tego jako surowy wskaźnik narusza ograniczenie po przekazaniu surowych i wspólnych wskaźników do tego samego bloku pamięci, czyniąc wspólny wskaźnik bezużyteczny. Istnieje również inna metoda wykonywania tej samej funkcjonalności, jak dostarcza enable_shared_from_this klasa. Ale ta metoda obejmuje dynamiczną obsadę.

Zapewnia następujące funkcje członka:

Konstruktor umożliwia nam konstruowanie obiektu.

Destruktury pozwól nam zniszczyć obiekt.

Operator „=”pozwala nam zwrócić odniesienie do wskaźnika „tego”.

Shared_from_this służy do zwrócenia współdzielonego wskaźnika, który dzieli własność wskaźnika „*tego”.

Słabe_from_tis zwraca własność słabego wskaźnika, który dzieli własność z wskaźnikiem „*tego”.

Składnia:

szablon klasa enable_shared_from_this;

Pokazana wcześniej jest składnia dla klasy enable_shared_from_tej podstawowej klasy. T oznacza rodzaj klasy, który należy zdefiniować w tej składni.

Przykład 1:

Teraz próbujemy przykładu dla klasy enable_shared_from_tej podstawowej, aby sprawdzić jej działanie i sposób jej wdrożenia. Najpierw dołączmy nasze pliki nagłówka. Pierwszy to „pamięć”. Drugi to „iostream”. Pamięć służy do umożliwienia kodera wykonywania różnych operacji, które są jak alokacja sterty pamięci. Drugi to „iostream”, w którym jest używany do umożliwienia operacji wejściowych wyjściowych, które są wykonywane w kodzie w celu wyświetlania danych, które mogą pokazać. Teraz, za pomocą struktury, definiujemy obiekt o nazwie „shrd_class”. Deklarujemy naszą klasę podstawową „enable_shared_from_this”, do której przekazujemy „shrd_class”. Oznacza to, że obiekt jest klasą podstawową enable_shared_from_this.

Struktura jest sposobem na grupowanie różnych powiązanych zmiennych w jednym miejscu. W naszym przypadku zbieramy zmienne wskaźnika w jednej klasie, która jest „OBJ”. Wewnątrz obiektu najpierw wywołujemy konstruktor lub obiekt „shrd_class”. Następnie deklarujemy funkcję get_class () współdzielonego wskaźnika typu „shrd_class”, która wyświetla komunikat „Własność”, gdy funkcja „get_class” jest wywoływana i zwraca metodę shared_from_this dostarczoną przez enable_shared_from_this klasę Instancje wspólnego wskaźnika.

Teraz przechodzimy do naszej głównej funkcji, w której deklarujemy wspólny wskaźnik obiektu typu „shrd_class”, do którego nazywamy „pf1”. Przydzielamy wskaźnik „shrd_class” za pomocą nowego słowa kluczowego w sterce pamięci. Następnie deklarujemy zmienną „PF2” typu automatycznego, do której przypisujemy „get_class ()” za pomocą wskaźnika udostępnionego „PF1”. Operator „->”, którego używamy w tym wierszu, oznacza, że ​​uzyskujemy dostęp do funkcji członka dowolnego obiektu, niezależnie od tego, czy jest to związek, struktura itp. za pomocą wskaźnika. W tym przykładzie uzyskujemy dostęp do metody get_class () klasy struktury „obj” przy użyciu wskaźnika „pf1”.

#włączać
#włączać
struct shrd_class: public std :: enable_shared_from_this
shrd_class ()
std :: shared_ptrget_class ()
STD :: Cout<< "ownership shared" << std::endl;
return shared_from_this ();

;
int main ()
std :: shared_ptr pf1 (nowy shd_class);
auto pf2 = pf1-> get_class ();

Teraz, nie mogę się doczekać naszego wyjścia, z powodzeniem wyświetliśmy komunikat, co oznacza, że ​​„PF1” jest instancją obiektu „shrd_class” i udostępnia własność. Widzimy to na zrzucie ekranu, który jest wyświetlany w następujący sposób:

Przykład 2:

Wykonajmy kolejny przykład, w którym tworzymy dwa wspólne wskaźniki, które dzielą się ich własnością. Teraz przejdźmy do naszego następującego wyświetlonego kodu. Najpierw deklarujemy pliki nagłówka „iostream” i plik nagłówka „pamięci”. Następnie deklarujemy enable_shared_from_tej klasa podstawowa o nazwie „OBJ” za pomocą struktur. Teraz przechodzimy do naszej głównej funkcji, w której wykonujemy udostępnianie obiektu między dwoma różnymi wskaźnikami współdzielonymi. Wewnątrz głównej funkcji deklarujemy wspólny wskaźnik o nazwie „shrd_ptr_1” i drugi typ „shrd_ptr_2” typu „obj”. W następnym wierszu do wskaźnika „sHRD_PTR_1” przypisujemy metodę „make_shared (), która służy do alokacji obiektu typu„ obj ”i zwracania obiektu shared_ptr.

Następnie przypisujemy naszą drugą metodę wskaźnika shared_from_this (), która pozwala nam zwrócić wskaźnik, który udostępnia własność wskaźnika „*tego”. W tym „shrd_ptr_1” dzieli własność z „shrd_ptr_2”. Następnie używamy stwierdzenia if (), w którym przekazujemy dwa warunki. Pierwszy „shd_ptr_1.właściciela_before (shrd_ptr_2) ”w tym właścicielu_bor jest funkcja członka, która zwraca wartość logiczną prawdziwą lub false, jeśli ten udostępniony wskaźnik zostanie zamówiony przed przekazanym wskaźnikiem.

W naszym przypadku sprawdza, czy „shrd” ptr_1 ”jest uporządkowany przed„ shrd_ptr_2 ”, czy nie. Drugi warunek to odwrotnie. W nim sprawdzamy, czy „shrd_ptr_2” jest mniejsze, czy uporządkowane przed „shrd_ptr_1”. Jeśli oba te warunki nie wystąpią, porusza się w instrukcji if () i wyświetla komunikat „shrd_ptr_1 i„ shrd_ptr_2 ”i udostępnia własność. Ostatecznie zwracamy wartość zerową, co oznacza, że ​​kod jest skutecznie wykonany bez żadnego błędu.

#włączać
#włączać
struct obj: std :: enable_shared_from_this ;
int main ()
std :: shared_ptr shrd_ptr_1, shrd_ptr_2;
shrd_ptr_1 = std :: Make_shared ();
shrd_ptr_2 = shrd_ptr_1-> shared_from_this ();
Jeśli (!shrd_ptr_1.właściciel_bore (shrd_ptr_2) && !shrd_ptr_2.właściciela_before (shrd_ptr_1))
STD :: Cout<< "shrd_ptr_1 and shrd_ptr_2 share ownership";
powrót 0;

Jak widać na wyjściu danego kodu, wyświetla komunikat pomyślnie. Oznacza to, że własność obu współdzielonych wskaźników „shrd_ptr_1” i „shrd_ptr_2” jest skutecznie udostępniana przy użyciu klasy bazowej enable_shared_from_this i jej funkcji członka.

Wniosek

W tym samouczku opisaliśmy metody korzystania z enable_shared_from_tej klasy oraz powód, dla którego są używane i jak ułatwiają użytkownikom dzielenie się własnością wskaźników między nimi. Staraliśmy się wyjaśnić enable_shared_from_tej klasy. Mamy nadzieję, że ten artykuł jest dla Ciebie przydatny, aby lepiej zrozumieć.