W jaki sposób są obsługiwane elementy tablicy C++ w funkcjach kontroli kopiowania?
Zastanawiałam się nad tym od dłuższego czasu. Weźmy następujący przykład:
struct matrix
{
float data[16];
};
Wiem, co robią konstruktor domyślny i destruktor w tym konkretnym przykładzie (nic), ale co z konstruktorem kopiującym i operatorem przypisania kopii?
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 dotyczy std::copy
lub std::uninitialized_copy
lub memcpy
lub memmove
albo co?
29
1 answers
Tak mówi standard w 12.8 (kopiowanie obiektów klasy). Budowa kopii:
Każdy obiekt podrzędny jest kopiowany w sposób odpowiedni do jego typu:
- jeśli obiekt podrzędny jest typu class, używany jest Konstruktor kopiujący dla klasy;
- jeśli obiekt podrzędny jest tablicą, każdy element jest kopiowany w sposób odpowiedni do typu elementu;
- jeśli obiekt podrzędny jest typu scalar, używany jest wbudowany operator przypisania.
Copy assignment:
Każdy obiekt podrzędny jest przypisany w sposób odpowiedni do jego typu:
- jeśli obiekt podrzędny jest typu class, używany jest operator przypisania kopii dla klasy (tak jakby przez jawną kwalifikację; to znaczy ignorowanie wszelkich możliwych wirtualnych funkcji nadrzędnych w większej liczbie klas pochodnych);
- jeśli obiekt podrzędny jest tablicą, każdy element jest przypisany w sposób odpowiedni do typu elementu;
- jeśli obiekt podrzędny jest typu skalarnego, używany jest wbudowany operator przypisania.
38
Author: icecrime,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 12:13:11
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 12:13:11