Общая инициализация класса для непостоянных членов должна быть сделана конструктором делегирования
Общая инициализация класса для непостоянных членов должна быть сделана конструктором делегирования.
Классы C++ часто имеют несколько конструкторов с различными синтаксисами. У этих инициализаторов могут иметь некоторые общие инициализации. Например, в этом коде, обоих конструкторах класса Circle
инициализируйте непостоянные члены x
Y
и r
.
class Circle{ int x; int y; int r; public: Circle(int x_in, int y_in, int r_in): x{x_in}, y{y_in},r{r_in}{ //... } Circle( int x_in, int y_in): x{x_in}, y{y_in}, r{0}{ //... } //... };
Чтобы избежать неожиданных результатов, делегируйте инициализацию непостоянных членов существующим конструкторам, когда это возможно. Постарайтесь не повторять инициализации в нескольких конструкторах.
Polyspace® отмечает класс, объединение или структуру, если какой-либо из их непостоянных членов инициализируется в нескольких конструкторах. Polyspace не отмечает:
Скопируйте или переместите конструкторов, которые не используют конструкторов делегата.
Массивы, которые инициализируются в нескольких конструкторах.
Объекты, которые являются инициализированным полем полем в нескольких конструкторах.
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: Специальные функции членства |
Категория: Необходимый, Частично автоматизированный |