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

Anonymous

unregistriert

1

03.02.2006, 13:56

Kleine Erklärung zu Singletons

Hey Leute,
Also bin gerade beim durcharbeiten der Singletons
und da ist mit eine Frage gekommen! Es geht um folgende Zeilen:

Quellcode

1
inline static T* Get()

bei folgender Funktion, also klar ist, das sie inline gesetzt wurde und auch static es geht um das * Ist diese Funktion mit einem Zeiger? Das T steht ja für irgendeinen Datentypen, aber wie ist das * zu verstehe und folgendes müsste ja das selbe sein, oder?

Quellcode

1
inline static T *Get()

so und dann noch hier:

Quellcode

1
T* T_CSingleton<T>::m_Spingleton = 0;

Es geht eigentlich auch um das * Hier wird ja die Singleton Variable initialisiert, aber wie warum wieder das *?

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

2

03.02.2006, 14:22

1) Also mit * definierst du IMMER einen Pointer auf diesen Datentyp (bei einer Deklaration). Wenn kein Datentyp dabeisteht (und auch kein Template), dann wird eine Pointervariable mit * dereferenziert!

Im ersten Fall handelt es sich um eine Methodendeklaration (inline), welche als Rückgabewert einen Pointer des Typs T zurückgibt. Das wäre das selbe wie wenn ich ohne Templates zum Beispiel so etwas schreibe:

C-/C++-Quelltext

1
inline static float* Get()


In diesem Fall, gibt die Funktion "Get" natürlich einen floatPointer zurück!

2) inline static T* Get() == inline static T *Get() == inline static T * Get()

3) Könntest du mal den ganzen Code der Klasse posten? (Deklaration mein ich)
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Anonymous

unregistriert

3

03.02.2006, 18:55

Warum benutzt ihr eigentlich immer diesen minderwertigen und fehleranfällige Singleton der mit new erstellt wird und auf Pointerhandling basiert? Nehmt doch einfach den Meyerssingleton!

Dann kann man sich auch so einen Quatsch ersparen:
T* T_CSingleton<T>::m_Spingleton = 0;

Und ihn leichter auf Templates aufbauen.

CW_Kovok

Alter Hase

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

4

05.02.2006, 20:23

ok wissenslücke

@ nix da: kannst du das genauer erklären?
Was es alles gibt, das ich nich brauche - Aristoteles

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

5

05.02.2006, 20:35

Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Stupidus

Frischling

Beiträge: 41

Wohnort: Heilbronn

Beruf: Schöler

  • Private Nachricht senden

6

02.03.2006, 15:42

C-/C++-Quelltext

1
inline static T* Get()

Zitat

1) Also mit * definierst du IMMER einen Pointer auf diesen Datentyp (bei einer Deklaration). Wenn kein Datentyp dabeisteht (und auch kein Template), dann wird eine Pointervariable mit * dereferenziert!

Im ersten Fall handelt es sich um eine Methodendeklaration (inline), welche als Rückgabewert einen Pointer des Typs T zurückgibt. Das wäre das selbe wie wenn ich ohne Templates zum Beispiel so etwas schreibe:

inline static float* Get()


In diesem Fall, gibt die Funktion "Get" natürlich einen floatPointer zurück!


ist der * dann nur dazu da, um dem Programmierer zu zeigen, dass der Rückgabewert ein Zeiger sein wird, oder muss das zwangsweise dabeistehen??

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

7

02.03.2006, 15:51

* ist da, um dem Compiler zu zeigen, dass der Rückgabewert ein Pointer ist.

Stupidus

Frischling

Beiträge: 41

Wohnort: Heilbronn

Beruf: Schöler

  • Private Nachricht senden

8

02.03.2006, 15:53

und man schreibt es immer hinter den Dateityp??

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

9

02.03.2006, 16:07

Man schreibt es genau dann hinter einen Datentyp, wenn man nicht eine Variable sondern einen Pointer auf eine Variable erhalten will.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
int *pLength = 0;     // Pointer auf eine Var vom Typ int

                      // mit pLength greift man auf die Adresse des int-Werts zu.

int iLength  = 0;     // Variable vom Typ int

                      // mit iLength wird auf den int-Wert zugegriffen.

// Bei Funktionen:

int* getp();        // Rückgabewert ist ein Pointer auf int

int geti();         // Rückgabewert ist int


// Verwendung:

pLength = getp();     // pLength erhält neue Adresse

iLength = geti();     // iLength erhält neuen Wert

*pLength = geti();    // pLength wird dereferenziert und der adressierte int-Wert erhält einen neuen Wert.

Stupidus

Frischling

Beiträge: 41

Wohnort: Heilbronn

Beruf: Schöler

  • Private Nachricht senden

10

02.03.2006, 16:14

ahhh. vielen Dank, das hat viel Licht in die Sache gebracht! :)

Werbeanzeige