C++ créer la matrice des objets de classes différentes)
J'ai besoin de créer un tableau qui contient des objets de plusieurs classes.
Exemple
class baseClass
{
//
};
class first : baseClass
{
//
};
class second : baseClass
{
//
};
Comment puis-je créer un tableau qui peut contenir first
et/ou second
objet à l'intérieur d'elle?
C'est un peu la maison-tâche pour moi, donc je suis obligé d'utiliser des tableaux, j'ai déjà cherché et je sais que c'est fait avec les bibliothèques boost sna, mais je n'ai aucune option là les gars...
Similaire: stackoverflow.com/questions/7018183/...
OriginalL'auteur stan | 2011-10-24
Vous devez vous connecter pour publier un commentaire.
C'est le plus simple et le plus dangereux. Vous devez être prudent au sujet de la durée de vie des objets afin d'éviter des fuites ou double libération. Vous devez aussi être prudent avec la matrice d'allocation et de désallocation, surtout si vous devez modifier la taille au moment de l'exécution.
Cela améliore l'exemple précédent parce que le vecteur gère la mémoire de la matrice pour vous, mais vous devez toujours être prudent avec les baseClass pointeurs.
C'est une autre amélioration qui élimine la nécessité d'allouer manuellement ou désallouer de la mémoire pour les objets, et c'est le type de coffre-fort en termes d'accès à des objets comme des premières ou secondes. Vous ne peut pas confondre un type d'objet pour un autre.
Avec cette option, vous pouvez toujours confondre des objets de types différents pour les uns les autres, mais il n'utilise que la bibliothèque standard et que vous n'avez pas à gérer la durée de vie des objets que vous allouer. Il utilise C++11.
Aussi, si vous n'avez pas besoin d'un tableau dynamique, vous pouvez utiliser
std::array<...,size>
std::array<std::unique_ptr<baseClass>,10> array3;
a absolument aucun espace ou une surcharge de temps lors de l'exécution surbaseClass *array[10];
, et est beaucoup plus sûr. (zéro frais généraux, en supposant un décent de mise en œuvre)OriginalL'auteur bames53
Les meilleures pratiques pour ce qui serait de créer un tableau de pointeurs intelligents - de préférence l'un de l'amplification ou de C++11 versions de la classe de base. Faire un tableau de pointeurs élimine le risque de "découpage" vos objets lorsque vous y accédez. À l'aide de pointeurs intelligents réduit le risque de fuites de mémoire. En faire une base de pointeur de classe signifie que soit la classe dérivée peut être stocké en toute sécurité.
OriginalL'auteur Harper Shelby
Si vous ne pouvez pas utiliser les bibliothèques vous avez besoin d'un tableau de pointeurs comme:
et pas de tranchage va se produire. (n'oubliez pas de
delete
tout)OriginalL'auteur Dani