Vecteur en tant que membre de la classe
Bonjour, j'ai cette question:
Je voudrais avoir un vecteur comme membre de la classe. C'est peut-être ma question
plus facile pour vous et je m'en excuse.
- comment dois-je déclarer le vecteur? Et est-ce correct?
std::vector<int> *myVector;
oustd::vector<int> myVector
? - comment dois-je gérer ce vecteur dans le dealloc?
- Comment puis-je initialiser le tableau dans un si?
Est-ce correct?
if(myCondition)
{
if(!myVector) //is this correct?
myVector = new std::vector<int>(); //is this correct? on this i have a error
}
OriginalL'auteur Safari | 2011-12-18
Vous devez vous connecter pour publier un commentaire.
Vous certainement vouloir utiliser
std::vector<int> myVector
. Pas besoin de l'initialiser, car il est automatiquement initialisée dans le constructeur de votre classe et libéré lorsque votre classe est détruite.OriginalL'auteur fschoenm
Suffit d'utiliser l'allocation automatique: la déclarer en tant que membre comme ceci:
Le tableau se construit automatiquement avant tout de votre constructeur est exécuté et est détruit automatiquement lorsque votre objet est libéré, vous n'avez pas besoin de s'en soucier (également, par défaut le constructeur de copie et l'opérateur d'affectation va gérer la copie gracieusement automatiquement).
Si, au lieu de cela, vous voulez créer le tableau qu'après un état particulier, vous devez recourir à un (smart) pointeur et allocation dynamique, mais à mon humble avis il est assez lourd (surtout parce que vous avez pour obtenir le droit à la "big three" - constructeur de copie, opérateur d'affectation, le destructeur); au contraire il suffit d'allouer le vecteur avec affectation automatique et utiliser un drapeau pour marquer votre tableau non initialisé, ou tout simplement de vérifier si sa taille est de 0.
OriginalL'auteur Matteo Italia
Qui dépend entièrement du contexte - ce que le vecteur et pourquoi vous en avez besoin. Devrait-il être partagé entre plusieurs objets? Si vous ne savez pas, ne le gardez pas un pointeur, allez avec votre deuxième option.
Si vous avez de bonnes raisons d'avoir un pointeur, alors s'il vous plaît utiliser un pointeur intelligent, celui qui fournit la plus grande partie de la propriété appropriée à votre situation -
shared_ptr
,scoped_ptr
,unique_ptr
ouwhatever_ptr
OriginalL'auteur Armen Tsirunyan
La plupart du temps, lorsque nous utilisons la bibliothèque standard, Nous n'avez pas besoin de se soucier de l'allocation/libération de mémoire. Le modèle permettra de gérer automatiquement. par exemple. La mémoire d'un std::vector sera augmenter ou diminuer en fonction des éléments stockés dans ce vecteur. Ce serait un exemple.
Donc, presque, vous pouvez l'utiliser de cette façon dans votre cas.
La mémoire du vecteur utilisé sera libéré lorsque la Classe de l'objet que vous avez créé est détruit.
OriginalL'auteur tyger