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

08.01.2016, 18:58

Frage: Klasse Zerstören

Ich habe eine frage ?( Ich kann ja wenn ich eine eine Instanz mit einem Pointer erstelle diesen Pointer wieder mit Delete freigeben.

Beispiel

C-/C++-Quelltext

1
2
Klasse *klasse = new Klasse();
delete klasse;


Wie mache ich das wenn ich eine Instanz ohne Pointer erstelle wie lösche ich die Instanz(Object) :hmm:

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

2

08.01.2016, 19:01

Ein "destructor" ist das was du suchst. Sozusagen der Gegenspieler des constructors.

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

3

08.01.2016, 19:04

Stichworte sind hier Heap und Stack.

Erstellst du ein Objekt "ohne Pointer", erstellst du es auf dem Stack und es existiert im aktuellen Gültigkeitsbereich(Scope) und auch nur da. Dieses Objekt wird aus dem Stack genommen(und afaik vorher wird der Destruktor aufgerufen), sobald du den Scope verlässt.

bspw

C-/C++-Quelltext

1
2
3
4
5
6
7
// Hier öffnet irgendwas einen neuen Scope, bspw. eine Funktion
{
Klasse meineKlasse();

// code...

} // wir verlassen den Scope, der Destruktor von Klasse wird aufgerufen und das Objekt vom Stack genommen



Zum Nachlesen: https://de.wikibooks.org/wiki/C%2B%2B-Pr…_Stack_und_Heap
WIP Website: kevinheese.de

4

08.01.2016, 20:22

Okey aber wie verlasse ich diesen Scope ?

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

5

08.01.2016, 20:23

Ich verweise auf meine Signatur. Noch dazu steht das in KeksX Antwort.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

6

08.01.2016, 20:59

Ok ich habe es jetzt verstanden aber wie soll ich das in der Praxis umsetzten ? :huh: Also wie ich im laufenden Spiel ein Objekt entferne(Scope verlassen) ?

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

7

08.01.2016, 21:06

Du solltest dir eventuell nochmal ein wenig Theorie reinziehen.

Ich verweise mal auf zwei praktische Links, aber ansonsten hat Nimelrian recht:
http://www.tutorialspoint.com/cplusplus/…iable_scope.htm
http://en.cppreference.com/w/cpp/language/scope

Hast du ein ordentliches Buch zu C++ gelesen? Da sollte sowas eigentlich erklärt werden.
WIP Website: kevinheese.de

8

08.01.2016, 21:09

Wenn du deinen Scope nicht verlassen willst, das Stack-Objekt aber trotzdem vorher zerstören möchtest, könntest du einen neuen Scope um das Objekt aufmachen (aber eine sehr unelegante Lösung)...

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

9

08.01.2016, 21:12

Wenn du deinen Scope nicht verlassen willst, das Stack-Objekt aber trotzdem vorher zerstören möchtest, könntest du einen neuen Scope um das Objekt aufmachen (aber eine sehr unelegante Lösung)...


Technisch gesehen öffnest du ja dann einen neuen Scope, in dem die Variable existierst, und zerstörst den. Die Variable ist also in einem anderen Scope.
WIP Website: kevinheese.de

10

08.01.2016, 21:14

Wenn du deinen Scope nicht verlassen willst, das Stack-Objekt aber trotzdem vorher zerstören möchtest, könntest du einen neuen Scope um das Objekt aufmachen (aber eine sehr unelegante Lösung)...


Technisch gesehen öffnest du ja dann einen neuen Scope, in dem die Variable existierst, und zerstörst den. Die Variable ist also in einem anderen Scope.


Ja schon; daher , dass es ein uneleganter Hack ist^^. Aber du kannst auf "Dinge" im übergeordneten Scope zugreifen.

Werbeanzeige