C ++ STD -Besitzer weniger

C ++ STD -Besitzer weniger
In diesem Artikel werden wir ein Funktionsobjekt in C ++ Sprache diskutieren, das std :: owner_less. Das vollständige Form ist der Eigentümer, der weniger als den Betrieb basiert als der Betrieb. Um dies ausführlich zu erklären, müssen Sie zuerst verstehen, welche Funktionsobjekte sind. Funktionsobjekte werden auch als Functors in C bezeichnet++. Funktionen sind wie Bausteine ​​zum Komponieren größerer Programme. Die Hauptsache, die wir in Functors tun, ist, dass wir Objekte aus Funktionen konstruieren. Also, was wir in diesem Fall tun, ist, ein Objekt wie eine Funktion zu verwenden.

Ein Functor ist eine Funktion mit einem Zustand und der Schlüssel zum Halten dieses Zustands ist der Operator (). Ein Functor ist eine Funktion, die durch Überlastung des Keyword -Operators () in einigen Klassen erreicht wird. Funktionen sind also Objekte, die sich wie Funktionen verhalten. Die gleiche alte Syntaxfunktion wird verwendet, um Funktoren aufzurufen. Ein Functor wird konstruiert, indem ein Objekt erstellt wird, das den Bediener überlastet. Lassen Sie uns nun den Besitzer_less Functor diskutieren. Dieses Funkor- oder Funktionsobjekt anstelle einer wertbasierten Typ-Bestellung bietet uns eine ordnungsbasierte gemischte Art von STD :: WACK_PTR und STD :: SHARED_PTR.

Es wurde so bestellt. Oder wenn beide leer sind, selbst wenn Werte, die wir von Getter -Methoden von Rohzeigern erhalten haben, nicht gleich sind. Diese führen Eigentümerbasisvergleiche zwischen schwachen Zeigern und gemeinsamen Zeigern durch. "Besitzer_less" wird zur Bestellung der Adresse des Steuerblocks verwendet. Es berücksichtigt also zwei schwache Zeiger oder gemeinsame Zeiger, wenn sie den gleichen Eigentum teilen.

Syntax:

Die Syntax für den Bediener des Eigentümers weniger ist:

Vorlage strukturbesitzer_less;
Besitzer_less>

Die Standardbibliothek von C ++ gibt uns eine Spezialisierung von std :: besitzer_less, wenn „t“ nicht initialisiert wird. Im Falle dessen werden die Parameter von der Parameterliste abgezogen.

Beachten Sie, dass dies eine Vorlage für Eigentümer_less ist. Es hat keine bestimmte Syntax, da es ein Ansatz zur Lösung eines Problems mithilfe von Smart -Zeigern und -funktionen ist.

Die Mitglieder von Owner_less

bool operator () (const std :: shared_ptr& lhs,
const std :: shared_ptr& rhs) const noexcept

Beispiel # 01:

Dazu haben wir keinen komplexen Code geschrieben, der eine Struktur, Klasse, Funktion oder Programmierobjekte wie diese verwendet. Stattdessen haben wir versucht, einen Code zu schreiben, der in unserer Hauptmethode so einfach wie möglich sein kann. Wir haben einen Zeiger einer DataType -Ganzzahl mit einer Länge von 10 initialisiert.

Danach haben wir einen gemeinsamen Zeiger "X" mit einer Länge von 20 deklariert. Wir haben einen weiteren gemeinsamen Zeiger Y mit der Länge als gemeinsamer Zeiger „X“ deklariert. In der nächsten Zeile haben wir den Zeiger auf wertbasierte Stelle gesetzt. In Zeile Nr. 12 haben wir unsere Zeiger auf besitzlose Zeiger gesetzt. Jetzt werden wir wertbasierte Einfügungen für unsere Zeiger X und Y durchführen.

Danach werden wir das gleiche tun, aber Eigentümer, der für unsere Zeiger x und y basiert, unter Verwendung unseres Functor std :: besitzer_less. Bitte beachten Sie, dass wir denselben Code sowohl für wertbasierte als auch für Eigentümerbasis geschrieben haben. Der einzige Unterschied besteht.

Um Ihnen den Wertdifferenz- und Größenunterschied zwischen den beiden Ansätzen zu zeigen, haben wir die Größe sowohl der Werte- als auch der inhaberbasierten Zeiger gedruckt. Danach haben wir in Zeile Nr. 20 den Zeiger gelöscht, den wir zunächst zu Beginn unserer Hauptfunktion erstellt haben. In der letzten Zeile haben wir 0 zurückgegeben, weil der Rückgabetyp unserer Hauptmethode eine Ganzzahl ist. Also haben wir 0 zurückgekehrt. Jetzt werden wir unseren Code ausführen und unser Ergebnis überprüfen.

#enthalten
#enthalten
#enthalten
int main ()

int * pointer = new int (10);
std :: Shared_ptr x (New int (20));
std :: Shared_ptr y (x, Zeiger);
std :: set < std::shared_ptr > value_based;
std :: set < std::shared_ptr, std :: besitzer_less>> Besitzer_Based;
value_based.einfügen (x);
value_based.einfügen (y);
Eigentümer_Based.einfügen (x);
Eigentümer_Based.einfügen (y);
std :: Cout << "value_based.size() is " << value_based.size() << '\n';
std :: Cout << "owner_based.size() is " << owner_based.size() << '\n';
Zeiger löschen;
Rückkehr 0;

Die Ausgabe, die wir aus dem oben aufgeführten Code erhalten, lautet wie folgt. Wenn wir uns die Ausgabe ansehen, können wir feststellen, dass die Größe des wertbasierten Zeigers 2 und die Größe des Eigentümers basierten Zeiger 1 beträgt. Die Frage stellt sich hier, dass, wenn wir dieselben Schritte für beide ausführen? Die Antwort lautet, dass dieser Functor, wie wir bereits in unserer Einführung erläutert haben. Aber wenn die Werte für beide Zeiger unterschiedlich sind, warum teilen sie dann den gleichen Eigentum?

Dies ist also der Hauptvorteil des Eigentümerlosenfunktionsobjekts. Deshalb beträgt die Größe des Wertbasis zwei, weil es zwei Zeiger hat und beide unterschiedliche Besitzer haben. In Eigentümerbasis verwenden wir jedoch Eigentümerfunktoren. In unserem Fall teilen sich die beiden gemeinsamen Zeiger den gleichen Eigentum. Deshalb werden sie als gleichwertig angesehen und die Größe der Eigentümerbasis wird 1.

Abschluss

In diesem Leitfaden haben wir eine Art Funktionsobjekt in C ++ besprochen, das std :: besitzer_less ist. Wir haben über Funktionsobjekte erklärt, wie diese Objekte verwendet werden und wie diese deklariert und aufgerufen werden. Danach diskutierten wir STD :: OBERSON_LESS -Funktionsobjekte und erläuterten ihre Anwendungen und Definition in Bezug auf die Programmierung. Später erklärten wir ihre Syntax und schauten uns ihre Mitglieder an. Wir haben auch ein praktisches Beispiel für das Thema durchgeführt, damit Sie das Konzept ausführlicher verstehen können. Um dieses Thema abzuschließen, können wir sagen, dass STD :: OBERSCHLIESSE_LESS FUNKTER oder Funktionsobjekte definiert, die Eigentümervergleiche zwischen schwachen Zeigern und gemeinsamen Zeigern durchführen.