J'ai une classe abstraite définissant une méthode virtuelle pure en C++:Comment allouer de la mémoire à un tableau d'instances en utilisant une classe abstraite?
class Base
{
Base();
~Base();
virtual bool Test() = 0;
};
J'ai sous-classé cela avec un certain nombre d'autres classes (qui fournissent une mise en œuvre pour le test()), que je désignerai comme A, B, C, etc. Je veux maintenant créer un tableau de l'un de ces types en utilisant cette classe de base:
int main(int argc, char* argv[])
{
int size = 0;
Base* bases = new Base[10];
bases[size++] = new A();
bases[size++] = new B();
for (int i = 0; i < size; i++)
{
Base* base = bases[i];
base->Test();
}
}
(Excuse toute erreur je aurais pu faire, j'écris ceci à la volée fournir un exemple simple). Le problème est que je ne peux pas instancier le tableau car cela nécessiterait de créer une instance de la classe Base (ce qu'elle ne peut pas faire car elle est abstraite). Cependant, sans cela, il n'a pas alloué la mémoire nécessaire pour assigner aux indices du tableau, et fournit donc une erreur de segmentation lors de la tentative d'accès à cette mémoire. Je suis sous l'impression que ce n'est pas une bonne pratique de mélanger de nouvelles et supprimer avec malloc et gratuit. Il se peut que j'aie confondu la façon dont cela devrait être utilisé et je devrais essayer d'utiliser des modèles ou d'autres mécanismes pour le faire, mais j'espère avoir fourni suffisamment d'informations pour illustrer ce que je tente de faire .
Alors, quelle est la meilleure façon de procéder et comment contourner ce problème d'allocation de mémoire à une classe abstraite?
Merci, Dan
Destructeur devrait également être virtuel –
+1 pour ne pas avoir peur de demander – paxos1977