Question

Je voudrais savoir comment adapter la section 11.14 de C ++ - FAQ-lite tableaux

.

En fait, je voudrais quelque chose comme ceci:

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

Cependant, je ne l'ai pas été en mesure de comprendre la syntaxe correcte de déclarer et appeler cette operator delete[] (pool). Quelqu'un peut-il aider ici?

Était-ce utile?

La solution 2

Il est impossible. raisons que vous Bjarne ne serez jamais il déterminer la juste piscine correcte. Sa solution est:. Vous devez appeler manuellement tous et Destructeurs ensuite trouver la piscine correcte pour être en mesure de désaffecter la mémoire manuellement

Références:

FAQ de Bjarne: Y at-il un placement supprimer

pertinent sections standard C ++:

3.7.3.2.2 seul opérateur membre supprimer des fonctions avec un argument de type size_t sont considérés comme des expressions de suppression.

5.3.5.1 Supprimer la syntaxe d'expression ne permet pas de paramètres supplémentaires.

Autres conseils

Appelle les dtors sur les objets individuels, puis utilisez:

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

Vous pouvez lire à nouveau tout l'élément de FAQ et vous trouverez là.

scroll top