operator new überladen "the dirty way"?



  • Hallo,

    ich schreibe an einem Programm, das alle Instanzen einer Klasse in einem std::vector<Klasse*> speichert (der Konstruktor fügt den this-Zeiger ein) und beim Aufruf einer Funktion (normalerweise vor dem Ende des Programmes) alle Elemente des Vectors mittels delete löscht. Wenn zu diesem Zeitpunkt aber Objekte existieren, die nicht mittels new allokiert worden sind, also auf dem Stack liegen, ist das ein Problem.
    Ich habe nicht vor, "named constructors" zu benutzen, also dachte ich, ich könnte operator new überladen. Die Methode besitzt allerdings keinen this-Zeiger, also kann ich ihn auch nicht in den Vector geben. Ich habe also versucht, den neu allokierten Speicherbereich "einfach so" in den Vector einzufügen:

    std::vector<Klasse*> objlist;
    
    void* Klasse::operator new(size_t s)
    {
    	Klasse* tmp = ::operator new(s);
    	objlist.push_back(tmp);
    	return tmp;
    }
    

    Obwohl eigentlich anzunehmen ist, dass das Objekt in Zukunft die Adresse tmp haben wird, scheint mir diese Methode doch ziemlich "dirty" zu sein. Was meint ihr dazu? Ist so eine Verwendung legitim, oder gibt es gar einen viel einfacheren Weg, an den ich nicht gedacht habe?

    Danke,
    Bernhard



  • Hallo,

    ich hab mal sowas aehnliches gemacht:

    http://www.rafb.net/paste/results/tv3XYe16.html

    Ist sicherlich nicht schoen, aber fuer die schnelle war es fuer mich ok.

    mfg
    v R


Log in to reply