Me gustaría saber cómo adaptar section 11.14 of the C++-FAQ-lite a las matrices.¿Cómo declaras y utilizo la eliminación de un operador de la piscina sobrecargado?
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 ayudar aquí?
Lo siento, no lo entiendo. ¿Cómo esta declaración elimina la matriz 'manyFoos'? ¿Y cómo sabe el compilador llamar 'operator delete []', not 'operator delete'? – Tobias
@Tobias: tuve un error tipográfico. Publicación fija. – dirkgently
@Tobias: cuando utiliza el formulario de ubicación, necesita hacer lo que el compilador hace por usted automáticamente: 1) llame al dtor sobre el objeto (s) 2) libere la memoria. La primera línea de código se ocupa de # 1. Ahora, la segunda línea, se ocupa de liberar esa parte del 'pool' de donde provienen los objetos de la matriz. – dirkgently