2010-11-12 4 views
28

C'est quelque chose que je me suis demandé depuis longtemps. Prenons l'exemple suivant:Comment les membres du groupe C++ sont-ils traités dans les fonctions de contrôle de copie?

struct matrix 
{ 
    float data[16]; 
}; 

Je sais ce que le constructeur par défaut et destructor font dans cet exemple spécifique (rien), mais qu'en est le constructeur de copie et l'opérateur d'affectation de copie?

struct matrix 
{ 
    float data[16]; 

    // automatically generated copy constructor 
    matrix(const matrix& that) : // What happens here? 
    { 
     // (or here?) 
    } 

    // automatically generated copy assignment operator 
    matrix& operator=(const matrix& that) 
    { 
     // What happens here? 

     return *this; 
    } 
}; 

-t-il impliquer std::copy ou std::uninitialized_copy ou memcpy ou memmove ou quoi?

+3

Ce n'est pas vraiment C, mais (surtout) C++. –

+0

@DervinThunk J'ai changé le titre de la question de C à C++ – jfritz42

Répondre

37

C'est ce que dit la norme en 12.8 (Copier des objets de classe). construction de copie:

Chaque sous-objet est copié de manière appropriée à son type:

  • si le sous-objet est de type classe, le constructeur de copie pour la classe est utilisée;
  • si le sous-objet est un tableau, chaque élément est copié, de la manière appropriée au type d'élément;
  • Si le sous-objet est de type scalaire, l'opérateur d'affectation intégré est utilisé.

Copier affectation:

Chaque sous-objet est attribué de manière appropriée à son type:

  • si le sous-objet est de type classe, l'opérateur d'affectation de copie pour la classe est utilisé (comme si c'était par une qualification explicite, c'est-à-dire en ignorant les éventuelles fonctions de substitution virtuelle dans des classes plus dérivées);
  • si le sous-objet est un tableau, chaque élément est affecté, de la manière appropriée au type d'élément;
  • Si le sous-objet est de type scalaire, l'opérateur d'affectation intégré est utilisé.
Questions connexes