Оператор присваивания по умолчанию вызывает operator = для всех участников?

И аналогично, конструктор копирования по умолчанию вызывает конструктор копирования для всех членов? Например, если у класса есть не-POD член, например:

class A
{
std::string str;
};

…будет ли сгенерированный компилятором конструктор копирования и оператор присваивания работать правильно? Будут ли они вызывать конструктор копирования строки и operator= или они просто сделают побитовую копию переменной-члена str?

Другими словами, имеет ли std::string Член означает, что этот класс нуждается в пользовательском конструкторе копирования и операторе присваивания?

5

Решение

Да, сгенерированный компилятором будет работать правильно.

Однако, если вы реализуете свои собственные и оставляете их пустыми, это не так.

Если вы не управляете памятью и все ваши участники обеспечивают правильное копирование / назначение / уничтожение, вам не нужно (и не следует) реализовывать свой собственный конструктор копирования / оператор деструктора / назначения.

Другими словами, означает ли наличие члена std :: string, что для этого класса требуется пользовательский конструктор копирования и оператор присваивания?

Нет, сгенерированные компилятором будут работать отлично.

5

Другие решения

Других решений пока нет …