Zeiger auf Objekte?
-
hi,
habe ein Programm, welches zur Laufzeit Instanzen einer Klasse erzeugen soll. Mit einer einzigen Instanz ist das kein Problem, aber wie kann man mehrere Instanzen handhaben? Die Schwierigkeit ist, dass bei der Erzeugung eines Objektes der Klasse nicht klar ist, wann und ob noch neue Objekte erzeugt werden müssen. Muss ich ein Array von Zeigern anlegen, welches zum Anfang nur einen einzigen Eintrag hat und dann dynamisch erweitert wird, oder geht das auch einfacher?
mfg BausO
-
vector<object*> objektHalde;
object * t = new object;
objektHalde.push_back(t);
-
also sollte man doch einen vector verwenden..., oder?
mfg BausO
-
ich bin mir nicht 100% sicher, aber
es duerfte doch probleme mit dem loeschen
geben, wenn eine container-klasse dynamisch
erzeugte objekte enthaelt
(also die objekte werden nicht aus dem speicher entfernt).
falls ja, waere es eine loesung auto_ptr zu benutzen?
also:
vector<auto_ptr<object> > v;
auto_ptr x( new object() );
v.push_back( x );
-
nö, weil auto_ptr nicht in Container gepackt werden können.
-
Ich würde hier einen vector bzw. eine Liste verwenden.
Löschen muß man die Elemente bevor der Vector zerstört wird, das stimmt.
Wenn hierzu ein Beispiel gebraucht wird, schreihen
-
schade
-
Das mit dem Vector ist nicht das Problem, hatte nur gedacht dass es eine noch einfachere Möglichkeit gibt.
DankeMfG BausO
-
auto_ptr lassen sich nicht in STL Containern verwenden, denn sie haben keinen CopyCtor fuer konstante Objekte.
Die Loesung von Knuddlbaer ist doch OK.
Nur man muss halt haendisch die zeiger deleten - oder man nimmt erst garkeine zeiger
oder man schreibt einen ptr_vector welcher mit Hilfe eines std::vectors implementiert ist, aber dennoch automatisch die zeiger freigibt
-
aha. gut, danke fuer die erklaerung :).
-
auto_ptr lassen sich nicht in STL Containern verwenden
Richtig. Allerdings gibt es auf der Welt eine Menge andere SmartPtr. Hier lohnt z.B. ein Blick auf www.boost.org.
-
hm.
also mal konkret gefragt:
was musste ein (einfacher)smart-pointer denn erfuellen,
damit man ihn in stl containern verwenden kann?
reicht es nicht einen Copykonstruktor zu definieren
(wobei der ander pointer seinen "besitz" aufgibt)?
also (so in etwa):SP::SP( const SP& other ) : ptr( other.ptr ) { other.ptr = 0; } und ptr waer dann: const T* ptr;
[ Dieser Beitrag wurde am 11.06.2003 um 07:59 Uhr von entelechie editiert. ]