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

FLO2

Treue Seele

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

11

12.07.2009, 14:35

Gut das habe ich jetzt verstanden! :)
Danke
Pi mal Daumen = 18.84955592

ugoessner

Frischling

Beiträge: 52

Wohnort: Wedemark OT-Mellendorf

Beruf: Systeminformatiker

  • Private Nachricht senden

12

28.07.2009, 15:21

eigene Singletonklasse

Ich habe mal die Singletonklasse etwas verändert.

Singleton.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef SINGLETON_H
#define SINGLETON_H

template <class T>
class TSingleton
{
  public:
    TSingleton();
    
    T *Get(void);
    void Del(void);

  protected:
    static *m_pSingleton;
};

#endif


Singleton.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "Singleton.h"

TSingleton::TSingleton()
{
    m_pSingleton=NULL;
}

T *TSingleton::Get(void)
{
    if(!m_pSingleton) m_pSingleton=new T;
    return m_pSingleton;
}

void TSingleton::Del(void)
{
    if(m_pSingleton) delete m_pSingleton;
    
    m_pSingleton=NULL;
}


Folgendes habe ich mir dabei gedacht:

1.) Der Sinn soll ja sein, dass nur eine Instanz erzeugt werden kann.
So das wenn schon eine Instanz existiert, dann wird nur ein Zeiger auf die Instanz zurückgegeben.

2.) Beim frei geben wird geprüft, ob überhaupt eine Instanz existiert.

Wäre doch somit die sicherste Möglichkeit?
Ich habe im Monent nicht die Möglichkeit dies zu testen.

Gruß Uwe.
#define __miniMAL 0x00

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

13

28.07.2009, 15:34

Und wo genau ist der Unterschied zur vorigen Lösung?!

btw:
Die Überprüfung auf 0 ist nicht nötig, wenn du etwas mit delete löschen willst.

C-/C++-Quelltext

1
2
    delete m_pSingleton; 
    m_pSingleton=NULL;


Reicht vollkommen.

Ich empfehle aber eh immer wieder das Meyers Singleton. Wenn man ein Singleton braucht, dann reicht das in der Regel.
http://www.devarticles.com/c/a/Cplusplus/C-plus-plus-In-Theory-The-Singleton-Pattern-Part-I/4/

C--

Alter Hase

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

14

28.07.2009, 15:38

@drakon: Der Unterschied ist scheinbar, dass die Kommentare fehlen. :roll:
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

15

28.07.2009, 15:46

Zitat von »"C--"«

@drakon: Der Unterschied ist scheinbar, dass die Kommentare fehlen. :roll:


Jo. Abgesehen davon ein inline,virtual, 2 static und die Definition der statischen Variable..

ugoessner

Frischling

Beiträge: 52

Wohnort: Wedemark OT-Mellendorf

Beruf: Systeminformatiker

  • Private Nachricht senden

16

28.07.2009, 15:55

Zitat von »"drakon"«

Zitat von »"C--"«

@drakon: Der Unterschied ist scheinbar, dass die Kommentare fehlen. :roll:


Jo. Abgesehen davon ein inline,virtual, 2 static und die Definition der statischen Variable..


Diese ganzen Zusätze machen doch sowieso nur bei größeren Projekten wirklich Sinn.
Bei der 2D-Spieleprogrammierung ist vielleicht nur eine Performance Frage.
#define __miniMAL 0x00

AriesT

Frischling

Beiträge: 24

Wohnort: Bei Frankfurt

Beruf: Azubi IT Kaufmann

  • Private Nachricht senden

17

06.08.2009, 16:01

Hi Leute...
Listing 8.19 / Try & Catch.

Ich benutze CodeBlocks und evtl. liegt es daran. Bei mir kommt nicht "Ausnahme aufgetreten... bllaaaaah"...
sondern eine Systemnachricht:
"This application has requested the Runtime to terminate it in an unusual way."

So weit ich das sehe, habe ich nichts falsch abgeschrieben.

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

18

06.08.2009, 17:52

Das liegt daran, dass eine Ausnahme nicht gefangen wurde. Dadurch wird implizit die Funktion terminate() aufgerufen. Sicher das du den Code korrekt abgeschrieben hast?
Signaturen werden überbewertet

AriesT

Frischling

Beiträge: 24

Wohnort: Bei Frankfurt

Beruf: Azubi IT Kaufmann

  • Private Nachricht senden

19

06.08.2009, 20:29

Guckstu:

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
#include <iostream>

using namespace std;

int main()
{
    int Version = 0;        //Versionsnummer


    try
    {
            //Versionsnummer aus Datei auslesen. Wert wird manuell ersetzt

            Version = 1;

            if (Version < 3)
                throw "Format veraltet, kann nicht gelesen werden";

            if (Version > 3)
                throw "Unbekanntes Format!";
    }

        //Catch Block kommt nach Throw

    catch (char *Fehler)
    {
            //Fehler ausgeben

            cout <<"Ausnahme aufgetreten: "<<Fehler<<endl;

            //Programm sicher herunterfahren

            cout <<"Speicher wird freigegeben und das Programm beendet"<<endl;
    }

return 0;
}


So stehts auch im Buch. :?

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

20

06.08.2009, 21:58

Tja dann liegt's wohl am Compiler.
Signaturen werden überbewertet

Werbeanzeige