new-Operator in Thread-Klasse
-
Hi,
ich habe mir mal wieder ein Programm auf Basis von wxWindows geschrieben. Diese Programm enthält nun eine Klasse die von wxThread abgeleitet ist. Innerhalb der Entry-Funktion der Thread-Klasse erzeuge ich mit dem new-Operator eine Klasse und speichere diesen Zeiger.
Meine Frage ist nun, ob jeder Thread dann seinen eigenen Zeiger, bzw. seine eigene Klasse erzeugt hat, oder ob es diese Klasse nur einmal gibt.Etwas Code, um die Sache zu veranschaulichen:
class Thread : public wxThread { public: void FreeAll(); void* Entry(); private: int a; int b; foo* ptrfoo; }; class foo { public: void DoSomething(); private: int a; int b; }; void *Thread::Entry() { ptrfoo = new foo(); ptrfoo->DoSomething(); }
Ich habe jetzt im Internet mehrfach Artikel gefunden in denen beschrieben wird, daß die Klasse foo hier nur einmal erzeugt wird. Ich dachte immer, es wäre genau anders.
Bitte um Hilfe...
Ich weiß, daß zumindest in der Thread-Klasse noch Konstruktor und Destruktor fehlen, aber ich hoffe man versteht trotzdem, was ich meine....
-
Hallo,
die Klasse foo gibt es selbstverständlich nur einmal und ihre Erzeugung hat überhaupt nichts mit dem new-Operator zu tun. Dir geht es hier wohl eher um die Objekte der Klasse.In deiner Entry-Methode wird ein neues foo-Objekt erzeugt und an den Zeiger ptrfoo gebunden.
Hast du jetzt zwei Objekte deiner Threadklasse und wird über jedes Objekt einmal die Entry-Methode aufgerufen, dann hat jedes Threadobjekt sein eigenes foo-Objekt. Problematisch wird es, wenn du Entry mehrfach aufrufst (auf dem selben Objekt). In diesem Fall verlierst du die Referenz auf ein foo-Objekt und damit produzierst du ein Ressourcenloch.