Ich würde gerne wissen, wie man section 11.14 of the C++-FAQ-lite an Arrays anpassen.Wie deklarieren und verwenden Sie einen überladenen Pool-Operator löschen?
Grundsätzlich würde ich so etwas wie dies will:
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;
}
Aber ich habe nicht diesen operator delete[] (pool)
erklärt die korrekte Syntax, um herauszufinden, und rufen kann. Kann mir hier jemand helfen?
Sorry, ich verstehe es nicht. Wie löscht diese Anweisung das Array 'manyFoos'? Und woher weiß der Compiler, Operator 'delete []', nicht 'operator delete' zu nennen? – Tobias
@Tobias: Ich hatte einen Tippfehler. Feste Post – dirkgently
@Tobias: Wenn Sie das Placement-Formular verwenden, müssen Sie tun, was der Compiler sonst automatisch für Sie tut - 1) rufen Sie das dtor auf dem Objekt (den Objekten) auf 2) geben Sie den Speicher frei. Die erste Codezeile kümmert sich um # 1. Jetzt sorgt die zweite Zeile dafür, dass der Teil des Pools, aus dem die Array-Objekte stammen, freigegeben wird. – dirkgently