2010-11-12 10 views
28

To jest coś, nad czym zastanawiałem się przez długi czas. Weźmy następujący przykład:W jaki sposób są obsługiwane elementy tablicy C++ w funkcjach kontroli kopiowania?

struct matrix 
{ 
    float data[16]; 
}; 

wiem co konstruktor domyślny i destruktor zrobić w tym konkretnym przykładzie (nic), ale co z konstruktora kopii oraz operatora przypisania kopia?

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; 
    } 
}; 

Czy to wiązać std::copy lub std::uninitialized_copy lub memcpy lub memmove czy co?

+3

To naprawdę nie jest C, ale (głównie) C++. –

+0

@DervinThunk Zmieniłem tytuł pytania z C na C++ – jfritz42

Odpowiedz

37

Oto, co standard mówi w 12.8 (Kopiowanie obiektów klasy). budowa kopia:

Każdy podobiekt są kopiowane w sposób odpowiedni do tego typu:

  • jeśli podobiekt jest typu klasy, konstruktor kopia dla klasy jest używany;
  • jeśli podobiekt jest tablicą, każdy element jest kopiowany w sposób odpowiedni do typu elementu;
  • jeśli podobiekt jest typu skalarnego, używany jest wbudowany operator przypisania. Przypisanie

kopiowania:

Każdy podobiekt przypisano w sposób odpowiedni do tego typu:

  • jeśli podobiekt jest typu klasy, operator przypisania kopii w klasie jest używany (jak w przypadku jawnej kwalifikacji, to jest ignorowanie wszelkich możliwych wirtualnych funkcji nadpisujących w bardziej pochodnych klasach);
  • jeśli podobiekt jest tablicą, każdy element jest przypisany, w sposób odpowiedni do typu elementu;
  • jeśli podobiekt jest typu skalarnego, używany jest wbudowany operator przypisania.
Powiązane problemy