Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

ФермаКактусов Высший разум (182113), закрыт 2 месяца назад
 class Student { 
protected:
char* name;
int* asses;

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


~Student();
};

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;
}
}
Лучший ответ
Николай Веселуха Высший разум (360818) 2 месяца назад
Можно!
 #include 

using namespace std;

class DinArray {
int* ptr;
size_t len;
size_t buf;
public:
DinArray(const initializer_list& lst)
: len(lst.size()), buf(lst.size()), ptr(new int[lst.size()]) {
copy(lst.begin(), lst.end(), this->begin());
}
int& operator[](size_t i) {
return ptr[i];
}
const int& operator[](size_t i) const {
return ptr[i];
}
size_t size() const {
return len;
}
int* begin() {
return ptr;
}
int* end() {
return ptr + len;
}
const int* cbegin() const {
return ptr;
}
const int* cend() const {
return ptr + len;
}
};

int main() {
DinArray da{ 1, 2, 3, 4, 5 };
for (const auto x : da) cout << x << ' ';
cout.put('\n');
for (size_t i = 0; i < da.size(); ++i) cout << da[i] << ' ';
cout.put('\n');
}
Остальные ответы
Стас Еролов [❄️] Мыслитель (7126) 2 месяца назад
Список инициализации выставляет значения в том порядке, в котором объявлены поля.
Просто поменяй местами аллокацию массивов и полей размеров (в списке инициализации)
Jurijus Zaksas Искусственный Интеллект (425536) 2 месяца назад
Можно.
Помести инициализацию в тело конструктора.
Похожие вопросы