Erzeugung und Auflösung lokaler Exemplare in C++
Klassen, wie ::std::string werden in C++ als benutzerdefinierte Typen bezeichnet, auch wenn sie in der Standardbibliothek der Programmiersprache definiert sind.
Erzeugung eines ::std::string-Exemplars
Ein Exemplar einer Klasse kann wie eine lokale Blockvariable eines Typs erzeugt werden, indem als Typnamen der Name einer Klasse verwendet wird.
In dem folgenden Programm wird auf diese Weise ein Exemplar der Klasse »::std::string« erzeugt, das mit dem Text »alpha« initialisiert wird. Es repräsentiert dann diesen Text.
main.cpp
#include <iostream>
#include <string>int main()
{ ::std::string const s{ "alpha" };
::std::cout << s << '\n'; }::std::cout
alpha
Als Initialisierer (initializer ) sehen wir hier - etwas vereinfachend – den Teil einer Variablendeklaration an, welcher direkt auf den Namen der Variablen folgt und den Anfangszustand (Anfangswert) dieser Variablen festlegen kann. (Bei einer Reihung können vor dem Initialisierer noch eckige Klammern stehen.)
In dem obigen Programmbeispiel ist der Initialisierer beispielsweise »{ "alpha" }«.
Auflösung von ::std::string-Exemplaren
Wenn die Ausführung des Blocks, in dem eine lokale Variable definiert wurde, endet, so endet damit auch die Lebenszeit der Variablen und damit des Exemplars, welches diese Variable enthält. Damit endet in dem folgenden Programmbeispiel die Lebenszeit des ::std::string-Exemplars in der Variablen »a« beispielsweise direkt nach der Ausgabe dieses ::std::string-Exemplars.
main.cpp
#include <iostream>
#include <string>int main() /* Ende der Lebenszeit v */
{ { ::std::string const a{ "alpha" }; ::std::cout << a << '\n'; }
{ ::std::string const g{ "gamma" }; ::std::cout << g << '\n'; }}::std::cout
alpha
gamma
Wir sprechen von der Auflösung (Vernichtung) eines Objekts, um den Übergang von einem Zeitraum, in dem das Objekt verwendet werden kann (etwa um Informationen zu speichern) und in der Regel auch Speicherplatz belegt, zu einem direkt folgenden Zeitraum zu bezeichnen, in dem das Objekt nicht mehr verwendet werden kann und keinen Speicherplatz mehr belegt.
Ein Exemplar einer Klasse, welches als lokale Variable benannt wurde und mit dem Ende der Lebenszeit dieser Variablen aufgelöst wird, nennen wir manchmal auch lokales Exemplar, obwohl es eigentlich nicht das Exemplar ist, das lokal ist, sondern die es enthaltende Variable.
Ein Objekt ist ein Speicherstück, das eine Information eines bestimmten Datentyps aufnehmen kann, auch eines fundamentalen Typs wie »int«. Als Exemplar bezeichnen wir ein Objekt dann, wenn es ein Exemplar einer Klasse ist, also wenn sein Typ eine Klasse ist. Ob ein Typ eine Klasse ist, kann der Dokumentation der Bibliothek entnommen werden.