Mi piacerebbe sapere come adattare lo section 11.14 of the C++-FAQ-lite agli array.Come si dichiara e si utilizza l'eliminazione di un gestore di pool sovraccarico?
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ò aiutare qui?
Scusa, non capisco. In che modo questa affermazione elimina l'array 'manyFoos'? E come sa il compilatore chiamare "operator delete []", non "operator delete"? – Tobias
@Tobias: ho avuto un errore di battitura. Post risolto – dirkgently
@Tobias: quando si utilizza il modulo di posizionamento è necessario eseguire ciò che il compilatore altrimenti fa automaticamente per voi - 1) chiamare il dtor sull'oggetto (i) 2) liberare la memoria. La prima riga di codice si occupa del # 1. Ora, la seconda linea, si occupa di liberare quella parte del 'pool' da cui provengono gli oggetti dell'array. – dirkgently