И аналогично, конструктор копирования по умолчанию вызывает конструктор копирования для всех членов? Например, если у класса есть не-POD член, например:
class A
{
std::string str;
};
…будет ли сгенерированный компилятором конструктор копирования и оператор присваивания работать правильно? Будут ли они вызывать конструктор копирования строки и operator=
или они просто сделают побитовую копию переменной-члена str
?
Другими словами, имеет ли std::string
Член означает, что этот класс нуждается в пользовательском конструкторе копирования и операторе присваивания?
Да, сгенерированный компилятором будет работать правильно.
Однако, если вы реализуете свои собственные и оставляете их пустыми, это не так.
Если вы не управляете памятью и все ваши участники обеспечивают правильное копирование / назначение / уничтожение, вам не нужно (и не следует) реализовывать свой собственный конструктор копирования / оператор деструктора / назначения.
Другими словами, означает ли наличие члена std :: string, что для этого класса требуется пользовательский конструктор копирования и оператор присваивания?
Нет, сгенерированные компилятором будут работать отлично.
Других решений пока нет …