2010-07-02 3 views
0

par exemple si je fais:Une classe va-t-elle rappeler son constructeur lorsqu'elle est poussée dans un vecteur std :: vector?

FOO foo; 
foovect.push_back(foo); 

où FOO est une classe avec un constructeur par défaut.

Le constructeur sera-t-il appelé uniquement lorsque foo est placé sur la pile, ou est-il appelé de nouveau lorsqu'il est inséré dans le fichier std :: vector?

Merci

que je fais:

OGLSHAPE::OGLSHAPE(void) 
{ 
    glGenBuffersARB(GL_ARRAY_BUFFER_ARB,&ObjectVBOInt); 

} 

Répondre

3

FOO foo; appelle le constructeur.
foovect.push_back(foo); appelle le constructeur de copie.

#include <iostream> 
#include <vector> 

class FOO 
{ 
public: 
    FOO() 
    { 
     std::cout << "Constructor" << std::endl; 
    } 
    FOO(const FOO& _f) 
    { 
     std::cout << "Copy Constructor" << std::endl; 
    } 
}; 

int main() 
{ 
    FOO foo; 
    std::vector<FOO> foovect; 
    foovect.push_back(foo); 
} 

sortie pour cela:
Constructor
Copy Constructor

+0

Parfait qui le nettoie, merci – jmasterx

3

Non, le constructeur de copie est utilisée, à savoir celui qui ressemble à ceci:

FOO(const FOO & f); 

Un constructeur de copie par défaut est fourni par le compilateur, si vous n'en fournissez pas vous-même.

+0

Donc le constructeur ne sera pas appelé deux fois? Donc, si mon constructeur affiche une boîte de message, je ne verrais que 1 boîte de message? – jmasterx

+0

@user Une fois pour construire l'objet (dans votre code) appelé "foo" et une fois pour faire la copie dans le vecteur. –

+0

@ user146780: que voulez-vous dire par "le" constructeur? Il y a un constructeur par défaut, un constructeur de copie, et peut-être plus. – JWWalker

0

Lorsque vous effectuez une push_back, votre objet est copié dans le vecteur. Cela signifie que le constructeur de copie de votre objet est appelé. Tous les conteneurs de bibliothèque standard traitent des copies d'objets, pas l'objet eux-mêmes. Si vous voulez ce comportement, vous devrez utiliser des pointeurs.

Questions connexes