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?

Author: jfritz42, 2010-11-12

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