Должен ли первый конструктор класса (первый в каскаде конструкторов) инициализировать ВСЕ поля создаваемого объекта? Даже те, которые сразу не могут быть инициализированны логичными значениями, т.е соответствущими логике программы? Такие поля нулями инициализировать или оставить без значений? С точки зрения безопасности кажется логичным их все занулить, чтобы избежать UB при несвоевременом обращении к ним.
Рассмотрим код:
class Rectangle
{
private:
int height;
int width;
int color;
bool isVertical;
public:
Rectangle(int height, int width) // нужно ли в этом "первом" конструкторе инициализировать
{ // поля color и isVertical искусственными значениями?
this->height = 10;
this->width = 20;
}
Rectangle(int height, int width, int color) : Rectangle(height, width)
{
this->color = 1;
}
Rectangle(int height, int width, int color, bool isVertical) : Rectangle(height, width, color)
{
this->isVertical = isVertical;
}
};