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

xxendlessxx

Treue Seele

  • »xxendlessxx« ist der Autor dieses Themas

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

1

16.08.2009, 19:49

Destruktor einer Klasse

Hallo Leute,
eine ganz kurze Verständnisfrage.
Wenn ich eine Klasse erstelle, von der Klasse z.B. zwei Instanzen erstelle und dann den Destruktor einer Instanz aufrufe, wieso kann ich dann noch immer die Member dieser Instanz aufrufen ? Ist es nicht so das der Destruktor die Instanz löscht / zerstört.

gruß michi.

2

16.08.2009, 19:56

Hmm sind die vll Static?

Wenn nicht zeig mal nen bisschen Code. Aber der Destruktor zerstört eigentlich alles, außer natürlich Static Funktionen/Membervars.

xxendlessxx

Treue Seele

  • »xxendlessxx« ist der Autor dieses Themas

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

3

16.08.2009, 19:58

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
#include <iostream>
using namespace std;

class cKlasse
{
public:
    int x;
    cKlasse();
    ~cKlasse();
};
cKlasse::cKlasse()
{
    cout << "Konstruktor wurde aufgerufen!\n";
    x = 100;
}
cKlasse::~cKlasse()
{
    cout << "Destruktor wurde aufgerufen!\n";
}
int main()
{
    cKlasse Nummer1, Nummer2;
    cout << Nummer1.x << endl;

    Nummer1.~cKlasse();
    cout << Nummer1.x << endl;

    cin.sync();cin.get();
    return 0;
}

Nope sind nich static.
Also ich kanns mir nicht erklären. Ich denk aber ich hab da einfach ein Verständnisproblem.
Mal sehen was jemand anders sagt. :-)

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

16.08.2009, 20:01

es kommt jetzt auf den kontext an. das objekt an sich existiert nicht mehr, nachdem du es gelöscht hast. membervariablen kannst du dann nicht mehr abgreifen.
ich vermute du meinst sowas:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
class Foo { ... };

Foo *a = new Foo();

cout << a->membervariable;

delete a;

//das sollte ordentlich knallen^^

cout <<a->membervariable;


ansonsten zeige bitte code^^

xxendlessxx

Treue Seele

  • »xxendlessxx« ist der Autor dieses Themas

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

5

16.08.2009, 20:06

Ok wenn ich es selbst, mit new und delete, in die Hand nehme knallt es zwar leider nicht, xD aber er zeigt mir wenigstens verrückte und nicht richtige werte an. Genau wie es sein sollte.
mich wunderts nur das es nicht mit dem standard destruktor funktioniert.


edit: lol warum wird st4ndart als ****** angezeigt wird XDD

6

16.08.2009, 20:10

Re: Destruktor einer Klasse

Zitat von »"xxendlessxx"«

Wenn ich eine Klasse erstelle, von der Klasse z.B. zwei Instanzen erstelle und dann den Destruktor einer Instanz aufrufe, wieso kann ich dann noch immer die Member dieser Instanz aufrufen ? Ist es nicht so das der Destruktor die Instanz löscht / zerstört.
Der Zugriff auf ein Objekt, nachdem dessen Destruktor ausgeführt wurde, resultiert in undefiniertem Verhalten. Ebenso das zweimalige Ausführen des Destruktors.

Rufe den Destruktor nicht manuell auf! Das wird automatisch am Ende des Blocks getan, oder bei delete, wenn du mit new anforderst. Ausnahme hierzu ist Placement New, aber das muss dich momentan nicht kümmern.

Zitat von »"xxendlessxx"«

edit: lol warum wird st4ndart als ****** angezeigt wird XDD
Weil es falsch ist. Es heisst Standard.

xxendlessxx

Treue Seele

  • »xxendlessxx« ist der Autor dieses Themas

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

7

16.08.2009, 20:16

Re: Destruktor einer Klasse

Zitat von »"xxendlessxx"«

edit: lol warum wird st4ndart als ****** angezeigt wird XDD

Zitat von »"Nexus"«

Weil es falsch ist. Es heisst Standard.

Ja aber warum zeigt das forum das als * an ^^
@Topic: ok jetzt hab ichs verstanden. Danke an alle.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

8

16.08.2009, 20:24

Re: Destruktor einer Klasse

Zitat von »"xxendlessxx"«

Zitat von »"xxendlessxx"«

edit: lol warum wird st4ndart als ****** angezeigt wird XDD

Zitat von »"Nexus"«

Weil es falsch ist. Es heisst Standard.

Ja aber warum zeigt das forum das als * an ^^
@Topic: ok jetzt hab ichs verstanden. Danke an alle.


Weil dich das Forum erziehen will, keine Rechtschreibfehler zu machen ;)

9

16.08.2009, 21:06

oO, wieso erlaubt der Compiler eigentlich, den Destruktor manuell aufzurufen?
[edit]Achja, wieso schreibst du auch ohne Rechtschreibkorrektur? Ich glaube schon, dass das jeder Browser können sollte und damit kann man so einfache Fehler wie "standard mit t" leicht finden.[/edit]
Lieber dumm fragen, als dumm bleiben!

10

16.08.2009, 21:17

Zitat von »"Jonathan_Klein"«

oO, wieso erlaubt der Compiler eigentlich, den Destruktor manuell aufzurufen?
Weil man diese Funktionalität in manchen Fällen braucht, wie beim erwähnten Placement New.

Werbeanzeige