1

我有一个池管理器模板类。当一个类对象被添加回池管理器时,我想将它重置回它的初始状态。我想在它上面调用放置析构函数和放置构造函数,以便在下次池管理器发出它时完全重置它。我已经尝试了很多方法来让它工作,但我很难过。这是我尝试过的一个例子。

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
}

我尝试了一堆不同的语法,但似乎都没有。代码本身是跨平台的,所以应该使用 gcc(在 mingw 或 linux 或 mac 下)编译,对于 Windows,我仍在使用 vs 2003。

4

2 回答 2

3

怎么样:

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...
}
于 2009-01-28T19:26:19.050 回答
2

Boost 有一个Pool库。使用他们的而不是自己编写可能更容易。

于 2009-01-28T19:30:57.027 回答