übergebener Zeiger einer Klasse im Destruktor deleten ?
-
hallo,
es gibt ja die Möglichkeit eine Klasse mit einem Zeiger zu deklarieren
class CSprite { CSprite(); ~CSprite(); int Create(char Filename[]); }; CSprite *SpriteName = new CSprite(); SpriteName->Create("test.png");kann man denn diesen übergebenen Zeiger im Destruktor der Klasse deleten ?
Der Sinn dahinter ist, das ich eine Klasse zum Laden von Sprites schreiben will auf Basis von Zeiger (wie im Beispiel gezeigt). Wenn man in einem Spiel aber ein paar hundert Sprites erstellt hat und diese alle einzeln mit delete löschen muss, wäre es sehr umständlich!
Ich möchte Zeiger verwenden, da sie sehr flexibler sind als die normale Deklaration von Klassen.Thx4Help
MfG, cyby
ps. hoffe mal das ich im richtigen Forumteil bin (mein erster Thread hier
)
-
cyby schrieb:
kann man denn diesen übergebenen Zeiger im Destruktor der Klasse deleten ?
Wenn du std::auto_ptr oder einen anderen Smart-Pointer anstatt eines einfachen Zeigertypen verwendest, ja.
cyby schrieb:
Wenn man in einem Spiel aber ein paar hundert Sprites erstellt hat und diese alle einzeln mit delete löschen muss, wäre es sehr umständlich!
Insbesondere wäre es höchst fehleranfällig.
cyby schrieb:
Ich möchte Zeiger verwenden, da sie sehr flexibler sind als die normale Deklaration von Klassen.
Bitte erläutere das mal genauer. Inwiefern bist du denn auf Zeiger angewiesen?
Hast du das mit der Create-Funktion von Delphi? Dann laß dich darauf hinweisen, daß Create in Delphi dem Konstruktor in C++ entspricht. Im gegenwärtigen Zustand muß deine Klasse jederzeit damit umgehen können, daß noch kein Sprite geladen wurde und in allen Funktionen entsprechende Fehlerbehandlung einführen. Wenn du anstelle Create gleich den Konstruktor verwendest, um eine zu ladende Datei anzugeben, ist das nicht notwendig.
cyby schrieb:
ps. hoffe mal das ich im richtigen Forumteil bin (mein erster Thread hier
)Da ich nichts C++Builder-spezifisches entdecken kann, wärest du wohl im C++-Subforum besser dran gewesen

Vielleicht verschiebt ein Moderator den Thread.
-
Warum wird das Objekt überhaupt dynamisch erzeugt? Wenn du mehrere davon hast brauchst du sowieso eine Containerklasse, std::vector böte sich da an.
#include <vector> // container mit Sprite Objekten std::vector<CSprite> Sprites; // neues Sprite Objekt in Container einfügen CSprite aSprite; aSprite.Create( "c:\\test.png" ); Sprites.push_back( aSprite );Bitte poste mal die komplette CSprite Header Datei.
-
Versuche hier bitte unnötige Kopien zu vermeiden.
Sprites.push_back( CSprite()); Sprites.back().Create( "c:\\test.png" );Ein defaultmäßig erzeugtes Objekt zu kopieren mag noch gehen. nachdem der Sprite aber erzeugt ist sind das bestimmt mehr Daten.