Frage

würde Ich mag wissen, wie anzupassen Abschnitt 11.14 von die C ++ -. FAQ-lite Arrays

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

Allerdings habe ich die richtige Syntax nicht in der Lage gewesen, um herauszufinden, diese operator delete[] (pool) zu erklären anzurufen. Kann jemand helfen hier?

War es hilfreich?

Lösung 2

Es ist unmöglich. Bjarne Gründe dafür, dass Sie nie es richtig den richtigen Pool herauszufinden. Seine Lösung ist. Sie müssen manuell alle Destruktoren aufrufen und dann herauszufinden, den richtigen Pool Lage sein, den Speicher manuell freigeben

Referenzen:

Bjarnes FAQ: Gibt es eine Platzierung löschen

Relevante C ++ Standard Sektionen:

3.7.3.2.2 Nur Operator Löschfunktionen mit einem Argument von size_t Art werden zum Löschen Ausdrücke betrachtet.

5.3.5.1 Löschen Ausdruck Syntax erlaubt keine zusätzlichen Parameter.

Andere Tipps

Rufen Sie die dtors auf die einzelnen Objekte zuerst und dann verwenden:

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

Sie können den ganzen FAQ Artikel noch einmal lesen und Sie werden es dort finden.

scroll top