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

1

01.01.2012, 23:56

Singletons, Logfile

Hej!
Ich habe eine Frage an alle Programmierer ;)
Muss man Singletons und die Logfile Klasse beherrschen?
Ich verstehe die beiden Themen überhaupt nicht -.-
Only God can judge me.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

01.01.2012, 23:59

Was genau verstehst du nicht?

3

02.01.2012, 00:02

Bei den Singletons verstehe ich den Code nicht, also vom Aufbau her, sowie die Funktion.
Das Logfile steht in Verbindung mit den Singletons, daher kann ich es ja auch nicht kapieren xD
Only God can judge me.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

02.01.2012, 00:05

Versuch vielleicht etwas konkreter zu beschreiben, was genau du jetzt nicht verstehst an dem Code, am Aufbau, an "der Funktion"...

5

02.01.2012, 00:12

Das ist der Code:

C-/C++-Quelltext

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
46
47
48
49
50
51
52
53
54
55
56
57
58
#ifndef TSINGLETON 
 #define TSINGLETON 
  
 template <class T> 
 class TSingleton 
 { 
 protected: 
  
 // Membervariablen 
 static T *m_pSingleton;   // Statisches Objekt 
  
 public: 
  
 // Memberfunktionen 
  
 // Destruktor 
 // 
 virtual ~TSingleton () 
 { 
 } 
  
 // Get 
 // 
 // Aufgabe: Wenn nötig, statisches Objekt erzeugen und 
 // Zeiger darauf zurückgeben 
 // 
 inline static T* Get () 
 { 
 // Existiert schon eine Instanz? 
 if (!m_pSingleton) 
 m_pSingleton = new T;   // Nein, dann neue Instanz erzeugen 
  
 // Zeiger auf die Instanz zurückgeben 
 return (m_pSingleton); 
  
 } // Get 
  
 // Statisches Objekt freigeben 
 // 
 static void Del () 
 { 
 // Gab es eine Instanz? 
 if (m_pSingleton) 
 { 
 delete (m_pSingleton);  // Ja, dann freigeben 
 m_pSingleton = NULL;    // und Zeiger auf NULL setzen 
 } 
  
 } // Del 
  
 }; 
  
 // Die statische Variable erzeugen 
 // 
 template <class T> 
 T* TSingleton<T>::m_pSingleton = 0; 
  
 #endif 


------------------------------------------------
inline static T* Get ()
Wie kann es eine Funktion als Zeiger geben? Wurde bisher im Buch noch nicht beschrieben. Was bedeutet das?
------------------------------------------------
return (m_pSingleton);
Wieso sind hier die Klammern angegeben? War bisher nie so.
------------------------------------------------
static void Del ()
Wie kann eine Funktion static sein? Was bedeutet das?
------------------------------------------------
delete (m_pSingleton);
Wieso sind hier die Klammern angegeben? War bisher nie so.
------------------------------------------------
static T *m_pSingleton; // Statisches Objekt
Wieso ist ein statisches Objekt als Zeiger deklariert?
------------------------------------------------
Wozu dienen die Singletons und was können sie?

Danke für eure Hilfe. Wie ihr seht verstehe ich nichts mehr.
Only God can judge me.

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

6

02.01.2012, 01:35

Es hat keinen Sinn, dir die genaue Funktionsweise zu erörtern, wenn du in deinem Buch noch nicht so weit bist. Manchmal muss man einsehen, dass man erst die Grundlagen beherrschen sollte, bevor man komplexere Konstrukte wie dieses Singleton-Template verstehen kann.

Um trotzdem ein paar deiner Fragen zu beantworten: Die Funktion ist kein Zeiger sondern gibt einen Zeiger zurück. Die Klammern bei deiner 2. und 4. Frage sind nicht notwendig. Das ist eine reine Stilfrage. Das Schlüsselwort "static" bewirkt, dass eine Membervariable/-funktion nicht an ein Objekt dieser Klasse gebunden ist, sondern unabhängig davon (wie eine globale Variable/Funktion im Namespace der Klasse) genutzt werden kann. Vereinfacht gesagt sind Singletons Klassen, die nur ein einziges Mal instanziert werden können.

7

02.01.2012, 12:07

Naja ok danke, ich überspring das Thema dann mal, hab mich in anderen Foren informiert, dass Singletons nicht zwingend nützlich sind.
Only God can judge me.

8

02.01.2012, 13:23

Ich habe den Sinn von Singletons zuerst auch nicht verstande und bin einfach weiter gegangen. Als es dann später zu dem Spiel kam und als ich selbst mit der SDL herumprobiert habe, ist mir der Sinn so langsam klar geworden und ich benutze sie momentan auch gelegentlich.

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

9

02.01.2012, 13:32

Es gibt Situationen, in denen man sonst globale Daten in einer Klasse kapseln möchte. In diesen Situationen macht es oft keinen Sinn, mehrere Objekte dieser Klasse zu haben. man erzeugt meist ein globales Objekt, das von jedem Punkt im Programm verwendet werden kann. Ich baue gerade ein kleines Betriebssystem. Dort gibt es eine Klasse, die den kompletten RAM-Speicher verwaltet. Hier wäre es tödlich, könnte man mehrere Objekte dieser Klasse erzeugen, da sich die verschiedenen Instanzen gegenseitig stören würden. Singletons bieten einen Schutz für diese Problematik.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

10

02.01.2012, 13:54

Das ich das noch erleben darf, dass jemand Singletons richtig benutzt :')

Werbeanzeige