Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Caruso

Frischling

  • »Caruso« ist der Autor dieses Themas

Beiträge: 4

Beruf: Schüler

  • Private Nachricht senden

1

12.07.2010, 18:26

Verständnisproblem bei Singletons, Listing 8.6

Hallo zusammen,

ich bin seit einiger Zeit mit dem Buch beschäftigt und wirklich begeistert :D , habe allerdings ein Verständnisproblem im Listing 8.6, also der Datei Singletons.hpp, in Zeile 56:

C-/C++-Quelltext

1
T* TSingleton<T>::m_pSingleton = 0;


Ich kapier nicht recht, wozu hier zu Beginn der Zeile der "Platzhalter" T mit dem *-Operator verwendet wird, obwohl mir bewusst ist, dass die Membervariable m_pSingleton ein Zeiger auf eine später erzeugte Instanz ist..
Danke für eure Antworten im Voraus!

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

12.07.2010, 18:36

Das ist einfach der Typ von [c]m_pSingleton[/c]. Ein Zeiger auf T (also ist * hier nicht als Operator zu deuten), wobei T eben der Template Parameter ist.

Das ganze ist ja die Initialisierung einer statischen Membervariable. Und da musst du den Typen halt noch angeben.
Also vom Prinzip her das hier:

C-/C++-Quelltext

1
2
3
4
5
6
class foo
{
 static int n;
};
...
int foo::n = 0; // initialisierung von n, welche ja nicht im Konstruktor statt findet.

3

12.07.2010, 18:36

Der * Operator ist, wie du schon gemerkt hast, da, weil es sich um einen Zeiger handelt. Und T ist ja der Typ, sprich, wenn du ne Klasse Widget hast, dann ergibt sich:
Widget* TSingleton<Widget>::m_pSingleton = 0;


EDIT: Zu spät^^

Caruso

Frischling

  • »Caruso« ist der Autor dieses Themas

Beiträge: 4

Beruf: Schüler

  • Private Nachricht senden

4

12.07.2010, 18:48

Alles klar, vielen Dank für die schnellen Antworten. Ich war bloß ein bisschen verwirrt durch die Anordnung des * in Zusammenhang mit dem T - ich meine, sonst sieht der Zugriff auf Zeiger etc. doch etwas anders aus...

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

12.07.2010, 18:58

Du greifst ja nicht auf einen Zeiger zu, sondern du definierst ihn lediglich. Schau nochmal mein kleines Beispiel da oben an. Wenn du da jetzt keinen integer, sondern einen Zeiger auf einen integer hast. Wie sieht das dann aus?

Caruso

Frischling

  • »Caruso« ist der Autor dieses Themas

Beiträge: 4

Beruf: Schüler

  • Private Nachricht senden

6

12.07.2010, 19:10

Im Prinzip wie im Quelltext aus dem Buch, oder? So doch zum Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
class foo
{
   static int *n;
};

int* foo::n = 0;

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

12.07.2010, 19:31

Genau. Und hier wird auf den Zeiger ja nicht zugegriffen, sondern er wird definiert und die Syntax dazu ist doch intuitiv, oder? Zuerst kommt der Typ, dann der Name (welcher natürlich durch die Klasse qualifiziert werden muss) und dann die Zuweisung. Also am Ende das gleiche, wie wenn du eine ganz normale (z.B lokale) Variable definierst:

C-/C++-Quelltext

1
2
3
4
void bar ()
{
  int n = 0; // Typ, Name und Zuweisung
}

Caruso

Frischling

  • »Caruso« ist der Autor dieses Themas

Beiträge: 4

Beruf: Schüler

  • Private Nachricht senden

8

12.07.2010, 19:43

Stimmt. Vorhin habe ich einfach nicht daran gedacht, dass man diesen dummen Stern ( * ) bei der Definition eines Zeigers beliebig zwischen Datentyp und dem Variablennamen verrücken kann, weil das in den Quelltexten im Buch zuvor immer ausdrücklich so gemacht wurde: int *n statt int* n ; die erste Möglichkeit passt hier nicht.
:thumbsup: Thx drakon

Werbeanzeige