Comment Déclarez-vous et utilisez supprimer un opérateur pool surchargé?
-
22-09-2019 - |
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?
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à.