Как сбросить класс с помощью плакета удаления / нового из шаблона? - PullRequest
1 голос
/ 28 января 2009

У меня есть шаблон класса менеджера пула. Когда объект класса добавляется обратно в диспетчер пула, я хотел бы вернуть его в исходное состояние. Я хотел бы вызвать деструктор и конструктор размещения на нем, чтобы он полностью сбрасывался при следующей выдаче менеджером пула. Я пробовал много способов заставить это работать, но я в тупике. Вот пример того, что я пробовал.

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.

Ответы [ 2 ]

3 голосов
/ 28 января 2009

Как насчет:

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...
}
2 голосов
/ 28 января 2009

Boost имеет библиотеку Pool . Возможно, будет проще использовать их вместо того, чтобы писать свои.

...