Frage

Ich habe eine Pool-Manager Template-Klasse. Wenn ein Klassenobjekt wird an den Pool-Manager hinzugefügt zurück Ich möchte es zurückzusetzen, um es Anfangszustand ist. Ich mag den Platzier destructor und Platzier Konstruktor auf mich anrufen, damit es voll für das nächste Mal zurückgesetzt wird es durch den Poolmanager ausgegeben wird. Ich habe viele Möglichkeiten versucht, dies zu Arbeit zu bekommen, aber ich bin ratlos. Hier ist ein Beispiel dafür, was ich versucht habe.

template <class T>
void PoolClass<T>::ReleaseToPool(T *obj)
{
     obj->~T();   //call destructor

     obj->T::T(); //call constructor
     //also tried new (obj)T(); //but this doesn't seem to work either

     //then misc code to add a pointer to the object
     //to my list of available objects for re-use later
}

Ich habe eine Reihe von verschiedenen Syntaxen versucht, und keiner scheint zu arbeiten. Der Code selbst ist Cross-Plattform so zusammenstellen sollte gcc (unter mingw oder Linux oder Mac) und für Windows Ich bin nach wie vor gegen 2003 verwendet wird.

War es hilfreich?

Lösung

Wie wäre:

template <class T>
void PoolClass<T>::ReleaseToPool(T *obj)
{
    obj->~T();                  //call destructor
    obj = new ((void *)obj)T(); //call constructor

    // add a pointer to the object to the list...
}

Andere Tipps

-Boost hat einen Pool Bibliothek . Es könnte einfacher sein, nur ihr verwenden, anstatt Ihre eigenen zu schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top