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

27.04.2011, 11:57

Listing 7.7

Guten Morgen,

habe da mal eine Frage bin jetzt beim Buch bei Listing 7.7 angekommen also bei den Konstruktoren und Destruktoren.
Und habe das Beispiel auch selbst versucht nur bei mir wird dort nur 2 mal der Konstruktor aufgerufen aber nicht der Destruktor...
Habe auch das Listing aus der CD Kompiliert doch dort ist das selbe Problem...

Weiß jemand vielleicht warum das so ist?

mfg

Tom


drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

3

27.04.2011, 12:11

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


using namespace std;

class CRaumschiff
{
public:
    CRaumschiff();
    ~CRaumschiff();
};

CRaumschiff::CRaumschiff()
{
    cout << " Konstruktor wurde aufgerufen " <<endl;
}
CRaumschiff::~CRaumschiff()
{
    cout << " Destruktor wurde aufgerufen" <<endl;
}
int main()
{
    CRaumschiff Spieler;
    CRaumschiff Gegner;

    getchar();
    return 0;
}


Und der vom Listing:

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

using namespace std;

// Klassen
//
class CRaumschiff
{
    public:

        // Memberfunktionen
        CRaumschiff  ();
        ~CRaumschiff ();

};

// Konstruktor
//
// Aufgabe: Initialisierungen
//
CRaumschiff::CRaumschiff ()
{
    cout << "Konstruktor wurde aufgerufen" << endl;

} // Konstruktor

// Destruktor
//
// Aufgabe: Aufräumarbeiten
//
CRaumschiff::~CRaumschiff ()
{
    cout << "Destruktor wurde aufgerufen" << endl;

} // Destruktor

// Hauptprogramm
//
int main ()
{
    // Variablen
    //
    CRaumschiff Spieler; // Ein Raumschiff für den Spieler
    CRaumschiff Gegner;  // Ein Raumschiff für den Gegner

    getchar();
    return 0;
}


4

27.04.2011, 12:20

Die Klassenobjekte sind vor Verlassen der main() immer noch gültig.
Somit wird auch kein Destruktor aufgerufen.
fka tm

Phalax

Frischling

Beiträge: 82

Beruf: Student Media Systems

  • Private Nachricht senden

5

27.04.2011, 12:26

Zitat

Die Klassenobjekte sind vor Verlassen der main() immer noch gültig.
Somit wird auch kein Destruktor aufgerufen.

Wie TrikkieMikkie schon sagte wird der Destruktor erst beim Verlassen von main() aufgerufen. Da du aber ein getchar() da stehen hast, siehst du erstmal nur die Konstruktor meldungen. Nach der Eingabe wird das Programm beendet und erst kurz davor siehst du dann die Destruktor Meldungen. Um das zu beheben, kannst du einfach getchar() weglassen und das Programm ohne Debuggen starten (sofern du VC++ nutzt Strg + F5).

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

6

27.04.2011, 12:28

du kannst auch einen codeblock benutzen oder es in eine extra funktion exportieren.
beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
int main ()
{
    // Variablen
    //
    {
        CRaumschiff Spieler; // Ein Raumschiff für den Spieler
        CRaumschiff Gegner;  // Ein Raumschiff für den Gegner
    } // Raumschiffe werden hier freigegeben...
    getchar();
    return 0;
} // ...und nicht mehr hier
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

7

27.04.2011, 12:30

ah, ok.
Ich Danke euch :)


Phalax

Frischling

Beiträge: 82

Beruf: Student Media Systems

  • Private Nachricht senden

8

27.04.2011, 12:32

@NachoMan: Cool, das kannte ich noch gar nicht. Sieht auch irgendwie komisch aus :lol:.

Werbeanzeige