Задать вопрос
@Sandrot

Почему нельзя инициализировать динамический массив в списке инициализации конструктора класса?

Имеется элементарный код в .h файле:

class Student {
protected:
	char* name;
	int* asses;

    int size_name;
    int size_asses;
public:
    Student();


    ~Student();
};


И в .cpp файле:

Student::Student() : size_name {64}, size_asses {5} , name {new char[size_name]}, asses {new int[size_asses]}
{
	cout << "Student()" << endl;
}

Student::~Student()
{
    if (name != nullptr)
    {
        delete[] name;
    }

    if (asses != nullptr)
    {
        delete[] asses;
    }
}


Анализатор CLang выдает следующие предупреждения напротив списка инициализации конструктора класса:
Field 'size_asses' will be initialized after field 'name' - при использовании компилятора MSVC2019
Field 'size_name' is uninitialized when used here - при использовании последнего MinGW

Подскажите, почему так?
  • Вопрос задан
  • 69 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
AshBlade
@AshBlade
Просто хочу быть счастливым
Список инициализации выставляет значения в том порядке, в котором объявлены поля.
Просто поменяй местами аллокацию массивов и полей размеров (в списке инициализации)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы