2012-11-08 4 views
2

Supposons que j'écris un C++ système de gestion du personnel avec STLDois-je déclarer mon vecteur <> en tant que vecteur <> *?

J'ai une classe d'entité appelée StaffMember:

class StaffMember 
{ 
    // 
} 

et un référentiel appelé Staff:

class Staff 
{ 
    private: 
    std::vector<StaffMember> staffMembers; 
} 

Comment puis-je savoir si je devrais déclarer staffMembers comme std::vector<StaffMember> ou std::vector<StaffMember>*?

En tant que pointeur, je devrais le supprimer à l'intérieur ~Staff(), sinon je ne le ferais pas.

Les deux fonctionneront, mais la question est, laquelle est-ce que je choisis et existe-t-il une règle générale que je peux utiliser quand cette question apparaîtra dans le futur?

+0

Vous l'avez dit vous-même. Le pointeur est un travail supplémentaire (même au-delà de ce que vous avez mentionné), et si vous n'avez pas de raison particulière d'en utiliser un, pourquoi feriez-vous ce travail supplémentaire? – chris

+0

vecteur est tout en minuscules, l'édition ... – Jarryd

Répondre

2

En règle générale par la valeur (std::vector<StaffMember>), à moins que vous devez partager. Même si vous avez besoin de le partager, un pointeur intelligent est bien meilleur qu'un pointeur brut.

Les pare-feu de compilation sont une exception (par exemple PIMPL).

1

J'utiliser:

// This means I have a vector (a list) of StaffMember pointers 
std::vector<StaffMember *> myStaffMembers; 

StaffMember *newStaffMember = new StaffMember(); 
myStaffMembers.push_back(newStaffMember); 
+0

Oui, j'ai des pointeurs dans le vecteur - je me suis rendu compte que cela a plus de sens juste après avoir posté la question. – user1002358

+0

@ user1002358, Dans le cas du polymorphisme, je suggère un vecteur de pointeurs intelligents. – chris

+3

hmm, je préfère std :: vector > myStaffMembers; – billz

Questions connexes