Domanda

Mi piacerebbe sapere come adattare sezione 11.14 di il C ++ - FAQ-lite ad array

.

In sostanza, vorrei qualcosa di simile:

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

Tuttavia, non sono stato in grado di capire la sintassi corretta per dichiarare e chiamare questo operator delete[] (pool). Qualcuno può aiutarmi qui?

È stato utile?

Soluzione 2

E 'impossibile. ragioni Bjarne che non avrai mai farlo bene capire la piscina corretta. La sua soluzione è:. È necessario chiamare manualmente tutti i distruttori e quindi capire la piscina corretto per essere in grado di rilasciare la memoria manualmente

References:

FAQ

di Bjarne: C'è un collocamento eliminare

Relevant C ++ sezioni standard:

3.7.3.2.2 unico operatore membro cancellare le funzioni con un argomento di tipo size_t sono considerati per le espressioni di eliminazione.

5.3.5.1 Sintassi delete espressione non consente parametri extra.

Altri suggerimenti

Chiama i dtors sui singoli oggetti e poi usare:

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

È possibile leggere l'intero articolo FAQ di nuovo e lo troverete lì.

scroll top