Déterminer la taille du tableau dans l'initialiseur du constructeur
Dans le code ci-dessous je voudrais tableau pour être défini comme un tableau de taille x lorsque le constructeur de la Classe est appelée. Comment puis-je le faire?
class Class
{
public:
int array[];
Class(int x) : ??? { }
}
source d'informationauteur zaratustra | 2009-04-15
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas initialiser la taille d'un tableau avec un non-const dimension qui ne peut pas être calculé au moment de la compilation (au moins pas dans l'actuelle norme C++, autant que je sache).
Je recommande d'utiliser
std::vector<int>
au lieu de tableau. Il fournit un tableau comme syntaxe pour la plupart des opérations.Vous les gens ont tellement d'être trop compliqué. Bien sûr, vous pouvez le faire en C++. C'est bien pour lui d'utiliser un tableau normal pour plus d'efficacité. Un vecteur n'a de sens que s'il ne connaît pas la taille du tableau à l'avance, c'est à dire, il doit croître avec le temps.
Si vous pouvez connaître la taille de la matrice d'un niveau plus élevé dans la chaîne, basé sur un modèle de classe est le plus facile, car il n'y a pas d'allocation dynamique et aucune chance de fuites de mémoire:
Si vous ne pouvez pas savoir la longueur au lieu de vous déclarer l'objet, ou si vous souhaitez réutiliser le même objet de différentes longueurs, ou vous devez accepter une longueur inconnue, alors vous devez procéder à votre constructeur et de les libérer dans votre destructeur... (et, en théorie, assurez-vous toujours qu'il a travaillé...)
Utilisation de l'opérateur new:
Tu ne comprends pas il n'y a pas besoin d'utiliser de vecteur, si l'on veut utiliser des tableaux, c'est une question d'efficacité, par exemple, moins d'espace, pas de temps de copie (dans ce cas, s'il est manipulé correctement, il n'est même pas besoin de supprimer le tableau à l'intérieur d'un destructeur), etc. wichever raisons.
la réponse correcte est: (cité)
N'essayez pas de forcer une utilisation non optimale des solutions de rechange ou vous serez confus programmeurs inexpérimentés
Je ne pense pas que cela peut être fait. Du moins pas de la façon dont vous le souhaitez. Vous ne pouvez pas créer de manière statique de taille de tableau (array[]) lorsque la taille vient de l'information dynamique (x).
Vous aurez besoin de stocker un pointeur vers int, et la taille, et de surcharger le constructeur de copie, opérateur d'affectation, et le destructeur de la poignée, ou l'utilisation de std::vector.
Désolé pour necroing ce vieux fil.
Il est en fait un moyen de trouver la taille de la matrice au moment de la compilation. Il va quelque chose comme ceci:
Alternativement, si vous détestez à malloc /nouveau, puis vous pouvez créer une taille basé sur un modèle de classe à la place. Cependant, je ne vous le recommande vraiment et la syntaxe est assez moche.
De toute façon, j'espère que cela a été utile 🙂
Au lieu d'utiliser les raw d'un tableau, pourquoi ne pas utiliser un vecteur lieu.
À l'aide d'un vecteur va vous donner automatique de la fuite de la protection dans le visage d'une exception et de nombreux autres avantages sur les raw d'un tableau.
Vous ne pouvez pas le faire en C++ - utiliser un std::vector à la place:
Déclarer votre groupe en tant que pointeur. Vous pouvez l'initialiser dans la liste d'initialiseur plus tard par le biais de nouvelles.
Préférable d'utiliser le vecteur de taille inconnue.
Vous voudrez peut-être regarder à cette questionainsi que sur les tableaux de longueur variable.
Deux options:
Utiliser std::vector. Il est ainsi facile de re-dimensionnement de la matrice.
Utiliser std::tr1::array. Cela a un statique de la taille.
Les deux peuvent être correctement initialisé dans le constructeur de l'initialiseur de la liste.