In diesem Artikel wird hauptsächlich die C++-Singleton-Klassenvorlage vorgestellt. Der Artikel führt sie ausführlich anhand von Beispielcode ein. Sie hat einen gewissen Referenzlernwert für das Studium oder die Arbeit aller. Freunde, die es benötigen, können dem Herausgeber von Weidian Reading folgen, um gemeinsam zu lernen .
Singleton-Klasse
beschreiben
Dies bedeutet, dass eine Klasse im gesamten Systemlebenszyklus höchstens eine Instanz haben kann, wodurch die Instanz eindeutig ist (eine Instanz verweist auf einen Objektzeiger), zum Beispiel: Zählen der Anzahl der Personen, die online sind
In der Singleton-Klasse ist sie in Lazy Style und Hungry Style unterteilt. Der Unterschied zwischen ihnen liegt in der Zeit beim Erstellen der Instanz:
- Lazy-Stil: bedeutet, dass die Instanz nach der Ausführung des Codes nicht existiert und nur bei Bedarf erstellt wird (gilt für einzelne Threads).
- Hungriger Stil: bedeutet, dass die Instanz bereits vorhanden ist, sobald der Code ausgeführt wird. Rufen Sie sie bei Bedarf einfach direkt auf (gilt für Multithreading).
Verwendung
- Setzen Sie das Zugriffsattribut des Konstruktors auf privat.
- Stellen Sie eine statische Member-Funktion GetInstance() bereit, die Benutzern nur Zugriff auf eine einzelne Instanz gewähren kann.
- Definieren Sie einen statischen Mitgliedszeiger, den Benutzer abrufen können
- Überladen Sie den Zuweisungsoperator (=) und den Kopierkonstruktor und setzen Sie sie auf privat, um das Kopieren zwischen Objekten zu vermeiden.
Eine vorläufige Untersuchung der Singleton-Klasse im Lazy-Stil:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
Druck ausführen:
0x6e2d18
0x6e2d18
0x6e2d18
Aus den Druckergebnissen ist ersichtlich, dass die Zeigerobjekte alle auf dieselbe Adresse zeigen, was bedeutet, dass eine Klasse höchstens eine Instanz haben kann.
Hinweis: Da die Instanz während des Systemlebenszyklus vorhanden ist, ist ein Löschen nicht erforderlich, solange das System noch läuft.
Wenn im obigen Lazy-Stil mehrere Csingleton-Zeigerobjekte gleichzeitig die Memberfunktion getInstance() in einer Multithread-Situation aufrufen, werden mehrere Instanzen erstellt, da m_pInstance = NULL ist.
Daher ist es im Fall von Multithreading erforderlich, zur Implementierung Hungry Man zu verwenden
Code wie folgt anzeigen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Singleton-Klassenvorlage
Was wir jetzt erklären, ist nur ein Framework. Es enthält nichts und kann die Anforderungen nicht erfüllen. Daher müssen wir es als Headerdatei für eine Singleton-Klassenvorlage schreiben. Wenn eine Singleton-Klasse benötigt wird, deklarieren Sie einfach die Singleton-Klassenvorlage Header-Datei direkt.
Schreiben Sie CSingleton.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
Wenn wir diese Singleton-Klassenvorlage benötigen, müssen wir sie nur als Freund über Freund in unserer eigenen Klasse hinzufügen.
Probieren Sie als Nächstes die Singleton-Klassenvorlage aus
Schreiben Sie main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
|
mstr = abc
this = 0x2d2e30mstr = abc
this = 0x2d2e30mstr = ABCDEFG
this = 0x2d2e30
Das Obige ist eine detaillierte Erklärung und Integration der vom Herausgeber eingeführten C++-Singleton-Klassenvorlagen. Ich hoffe, es wird Ihnen hilfreich sein.
Nachdruck von: Weidian Reading https://www.weidianyuedu.com