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

13.12.2010, 11:34

Gibt es in C++ die Möglichkeit, ein Objekt zu löschen?

Überschrift ist Thema ;)
Ich programmiere mit der PAlib für den DS und hab eine Sprite-Klasse erstellt(ist nicht so wichtig, aber der Vollständigkeit halber erwähn ichs) und suche jetzt eine Möglichkeit, einen erstellten Sprite, also ein Objekt, zu löschen.

hoffe auf baldige und hilfreiche Antwort :lol:

2

13.12.2010, 11:53

delete?
Funktioniert aber nur, wenn du ihn selbst über new erzeugt hast.
Sollte dem nicht so sein, muss die Variable ihren Gültigkeitsbereich verlassen um fehlerfrei zerstört zu werden.

3

13.12.2010, 12:08

also, das mit dem new...
Ich denke, ich müsste dann schreiben:

C-/C++-Quelltext

1
Sprite* sprite0 = new Sprite(...);


Oder? Geht das etwa auch ohne das "*"?
Denn wenn ichs mit Sternchen mach und dann eine Elementfunktion(Methode) aufrufen will, sagt der Compiler, "Sprite*" ist keine Klasse.

4

13.12.2010, 12:18

Tip: Nochmal das Buch über C++ Programmierung zur Hand nehmen.

Sprite* ist ein Pointer und um darüber auf Methoden zuzugreifen, musst du -> statt . nutzen.
Muss das Objekt unbedingt jetzt und sofort entsorgt werden oder reicht es nicht einfach aus den Gültigkeitsbereich abzuwarten? Oder kann man den Gültigkeitsbereich nicht sogar verkleinern?

5

13.12.2010, 12:31

Ach ja, das hatt ich vergessen... Irgendwas vergess ich immer... werds gleich versuchen!!!

EDIT: Danke, danke, nochmals danke! Jetzt, wo alles Funktioniert, kann ich die Klasse ja weiterprogrammieren...

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

6

13.12.2010, 13:07

Man _muss_ nicht unbedingt "->" verwenden. Das ist nur eine einfachere Schreibweise. Es macht das selbe wie (*pointer).methode(). "*" vor einem pointer zählt dann als dereferenzierung, d.h. du rufst die methode dann auf dem objekt auf, auf den der pointer zeigt. Du hast dann also sozusagen wieder das richtige objekt da stehen, weshalb du dann auch wieder den normalen punkt verwenden kannst.

7

13.12.2010, 13:27

Ja, steht alles in meinem C++-Buch... Habs nur vergessen...

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

8

13.12.2010, 17:19

Es geht aber auch ohne new!
Wie Genion schon sage wird die Variable zerstört, wenn sie ihren Gültigkeitsbereich verlässt. Man kann aber Gültigkeitsbereiche auch künstlich herstellen, z.B.:

C-/C++-Quelltext

1
2
3
4
5
{
    Sprite mysprite;
    // (Mache etwas mit mysprite)
}
// Hier ist mysprite zerstört

Vor der öffnenden Klammer muss kein Schlüsselwort wie for, if, oder sonstwas stehen!
Siehe auch http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.7

9

13.12.2010, 18:25

Hm das mitn -> = (*ptr). stimmt so nur bei zeigern. Der operator kann auch anderweitig überladen werden http://en.wikibooks.org/wiki/C++_Program…inter_operators
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

10

15.12.2010, 15:33

Es geht aber auch ohne new!
Wie Genion schon sage wird die Variable zerstört, wenn sie ihren Gültigkeitsbereich verlässt. Man kann aber Gültigkeitsbereiche auch künstlich herstellen, z.B.:

C-/C++-Quelltext

1
2
3
4
5
{
    Sprite mysprite;
    // (Mache etwas mit mysprite)
}
// Hier ist mysprite zerstört

Vor der öffnenden Klammer muss kein Schlüsselwort wie for, if, oder sonstwas stehen!


Das wundert mich nicht wirklich. Aber es geht hier um eine Klasse für SPRITES. Für Bilder, die man jederzeit löschen und erstellen können muss, z.b. für ein Spiel. Ein Schuss zum Beispiel. Der erschient kurz, bewegt sich und verschwindet wieder. Und den Befehl zum löschen hab ich Destruktor.

Werbeanzeige