Classes and class hierarchies
C.52
Используйте наследование конструкторов для импорта конструкторов в производный класс, который не нуждается в дополнительной явной инициализации
Причина
Если вам нужны эти конструкторы для производного класса, повторная реализация их утомительна и подвержена ошибкам.
Пример
std::vector имеет много хитрых конструкторов, поэтому если я хочу свой собственный vector, я не хочу переделывать их:
class Rec {
// ... data and lots of nice constructors ...
};
class Oper : public Rec {
using Rec::Rec;
// ... no data members ...
// ... lots of nice utility functions ...
};
Плохой пример
struct Rec2 : public Rec {
int x;
using Rec::Rec;
};
Rec2 r {"foo", 7};
int val = r.x; // uninitialized
Применение
Убедитесь, что каждый член производного класса инициализирован.
C.copy: Копирование и перемещение
Конкретные типы обычно должны быть копируемыми, но интерфейсы в иерархии классов не должны быть. Обработчики ресурсов могут быть или не быть копируемыми. Типы можно определить для перемещения в логических и в целях производительности.