Du bist nicht angemeldet.

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 525

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 905

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