¿Cómo restablecer una clase usando la eliminación de ubicación / nuevo desde una plantilla?

StackOverflow https://stackoverflow.com/questions/488874

  •  20-08-2019
  •  | 
  •  

Pregunta

Tengo una clase de plantilla de administrador de grupo. Cuando un objeto de clase se vuelve a agregar al administrador de grupo, me gustaría restablecerlo a su estado inicial. Me gustaría llamar al destructor y al constructor del mismo para que se reinicie por completo la próxima vez que lo administre el grupo. He intentado muchas formas de hacer que esto funcione, pero estoy perplejo. Aquí hay un ejemplo de lo que he intentado.

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
}

He probado varias sintaxis diferentes y ninguna parece funcionar. El código en sí es multiplataforma, por lo que debe compilarse usando gcc (bajo mingw o linux o mac) y para Windows todavía estoy usando vs 2003.

¿Fue útil?

Solución

¿Qué tal:

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...
}

Otros consejos

Boost tiene una biblioteca Pool . Puede ser más fácil usar el suyo en lugar de escribir el suyo propio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top