Listen in "C++"


KidPaddle

Very Active Member
Joined
May 14, 2006
Messages
491
Location
Germany
Hallo,

ich bin eigentlich ein Pascal/Delphi - Programmierer. Dort existiert in einer Klassenbibliothek eine Objektliste, welche nach außen die Objekte, wie in einem Array, unabhängig dessen Types, verwaltet und nach dem zerstören der Liste auch die Objekte automatisch wieder freigibt.

Dazu muss man wissen, das in Pascal/Delphi Objekte immer nur Zeiger sind und nie auf dem lokalen Stack abgelegt werden. Beim übergeben eines Objektes an Funktionen wird keine Kopie übergeben, sondern nur die Referenz auf das Objekt. Für die Freigabe des Objektes ist immer der Programmierer verantwortlich.

Nun versuche ich in C++ eine Liste mit Objekte zu verwalten. Dabei sollen die Objekte in der Liste automatisch zerstört werden. Habe diverse Möglichkeiten gefunden, nur sind diese Möglichkeiten immer auf ein bestimmten Objekttyp möglich. Eine Mischung von Väter- und Kindklassen ist in diesen Beispielen nicht möglich.

Hat jemand eine Klasse, in der ich einfach Objekte einfügen, herausnehmen und durch iterieren kann und das am Ende die eingefügten Objekte automatisch wieder freigibt? Dabei soll eine Mischung von Objekten, welche von einem Basistyp abgeleitet sind, möglich sein.

Gruß
Thomas
 
Leider nicht. Diese haben das Problem, das immer eine Kopie des Objektes abgelegt wird. Und wenn man Pointer auf die Objekte in der Liste speichert, werden die in der Liste gespeicherten Objekte nicht freigegeben. Zu dem können diese Listen immer nur eine Objektklasse verwenden, das speichern abgeleiteter Klassen ist nicht möglich.

Dazu gibt eine Menge Informationen und Tricks wie man die eine oder andere Beschränkung umgeht, Stichwort z. B. auto_ptr, aber das funktioniert immer nur für genau eine Klasse.

Leider sind die Beispiele meistens trivial und bisher habe ich keine Beispiele gefunden, wie man mehr als nur eine Art einer Klasse in einem <vector> oder <list> speichern kann.

Gruß
Thomas
 
Hallo,

Von einer Standardliste ableiten und den Destruktor entsprechend implementieren.

Sehr zweifelhaft, das Objekte im Heap automatisch beim zerstoeren einer Liste geloescht werden. Entweder Stack (automatische bereinigung beim verlassen des gueltigkeitbereichs) oder Heap (keine automatische bereinigung).

Und seit wann kann man in den STL-Collections keine abgeleiteten Klassen hinzufuegen?

just my 2 cents
 
€dit: SORRY HAB NICHT GESEHEN DAS DER FRED SCHON SOOOOO ALT IST :D
hoffe es hilft aber trotzdem irgendwem :-D

wieso machst du es nicht ungefähr so.
Code:
<i>
</i>#include <vector>

class Object
{
	public:
		int X,Y;
	private:
};

class Subobject
{
	public:
		int Z,A;
	private:
};


class Objectmanager
{
	public:
		void AddObject(Object* Obj)
		{
			Objectvector->push_back(&Obj);
		}
		void CleanUp()
		{
			while(Objectvector->size()>0)
			{
				delete Objectvector->back();
				Objectvector->pop_back();
			}
		}
		
	private:
		vector<Object*>* Objectvector;

};

int main()
{
	Objectmanager OBJECTM;
	
	OBJECTM.AddObject(new Object());
	OBJECTM.AddObject(new Subobject());

	return 0;
}

kann nicht garantieren das es jetzt auf anhieb funzt. habs ausm kopf geschrieben. aber so auf die art lös ich das auch immer. gruß michi
 
Back
Top