Pregunta

Me gustaría saber adaptarse de 11.14 el C ++ -. FAQ-lite para arrays

Básicamente, me gustaría que algo como esto:

class Pool {
public:
  void* allocate(size_t size) {...}
  void deallocate(void* p, size_t size) {...}
};

void* operator new[](size_t size, Pool& pool) { return pool.allocate(size); }
void operator delete[](void* p, size_t size, Pool& pool) { pool.deallocate(p, size); }

struct Foo {...};

int main() {
  Pool pool;

  Foo* manyFoos = new (pool) Foo [15];

  /* ... */

  delete [] (pool) manyFoos;
}

Sin embargo, no he sido capaz de averiguar la sintaxis correcta para declarar y llamar a este operator delete[] (pool). ¿Alguien puede ayudarme aquí?

¿Fue útil?

Solución 2

Es imposible. Bjarne razones que nunca lo haré bien averiguar la piscina correcta. Su solución es:. Debe llamar manualmente todos los destructores y luego averiguar la piscina correcta para poder anular la planificación de la memoria manualmente

Referencias:

Bjarne FAQ: ¿Hay eliminar una ubicación

Relevant C ++ secciones estándar:

3.7.3.2.2 único operador miembro de funciones de borrado con un argumento de tipo size_t se consideran las expresiones de borrado.

5.3.5.1 sintaxis de las expresiones Eliminar no permite parámetros adicionales.

Otros consejos

Llama a los dtors sobre los objetos individuales primero y luego usar:

for (int i = 0; i < 15; ++i) manyFoos[ i ]->~Foo();
operator delete[] (manyFoos, pool);

Usted puede leer el artículo entero FAQ de nuevo y se encuentra allí.

scroll top