Инициализация динамического массива
- Войдите на сайт для отправки комментариев
Сб, 01/10/2022 - 18:00
Добрый день, камрады. Подскажите, есть ли какой то способ инициализировать динамически
Добрый день, камрады. Подскажите, есть ли какой то способ инициализировать динамически
Ты бы хоть код привёл. Что за массив?
Черт, рука дрогнула. Начну сначала:
Добрый день, камрады. Подскажите, есть ли какой то способ инициализировать динамический массив при создании:
Есть такой класс:
Нужен массив классов, создаю и инициализирую так:
Очень хотелось бы сделать члены массива константными, но не соображу способ инициализации массива при создании. Буду признателен если подкинете идею как это сделать.
Не, нифига я вопрос не понял.
Сделать члены массива классами с нетривиальным конструктором.
вроде в строках 7-8 он и определен. не соображу как его вызвать (аргументы генерируются в цикле).
Либо добавить конструктор, либо, если религия не позволяет, объявить наследника и у него добавить нужный конструктор.
PS. А вообще класс с публичными полями это IMHO нонсенс.
Это продвинутая структура ))))
Либо добавить конструктор, либо, если религия не позволяет, объявить наследника и у него добавить нужный конструктор.
PS. А вообще класс с публичными полями это IMHO нонсенс.
Городить геттеры/сеттеры смысла не вижу, слишком все тривиально, но хотелось бы закрыть члены от изменения. Параметрический конструктор есть (строки 7-8), по одному инициализировать классы при создании получается, затем объявить и инициализировать ими массив тоже получается.
А как массив создать и инициализировать анонимными объектами класса - не могу сообразить.
Тогда я тоже не понял, что Вам надо.
Один экземпляр я могу объявить и инициализировать так:
А хотелось бы аналогичным образом объявить и инициализировать массив:
Но никак. Хотя опой чувствую что как то можно.
Напиши отдельный метод, что мешает то?)))
вроде в строках 7-8 он и определен. не соображу как его вызвать (аргументы генерируются в цикле).
Там определен конструктор класса, а в массиве у тебя указатели.
А вот так можно, интересно?
Напиши отдельный метод, что мешает то?)))
Так константными хочу сделать члены. Какой тут init :(
А вот так можно, интересно?
Можно, но зачем? Задача прийти к:
#13 глянь. И конструктор вообще не нужен тогда, пустым остаётся.
И вообще это все на обычную структуру похоже получается. ))
А тогда я не понимаю зачем массив структур одних и тех же значений...
А хотелось бы аналогичным образом объявить и инициализировать массив:
а так?
а так?
Так - вполне, спасибо. Но блин размер массива заранее неизвестен, цикл я так понимаю никак не запихать внутрь фигурных скобок для инициализации?
А тогда я не понимаю зачем массив структур одних и тех же значений...
Так они разные (просто поленился писать другие значения и скопировал два раза одни и те же данные)
размер массива заранее неизвестен, цикл я так понимаю никак не запихать внутрь фигурных скобок для инициализации?
тогда вы пошли неверным путем.
Вам надо сначала создать массив ссылок на обьекты, а потом инициализировать каждый по отдельности в цикле.
Вам надо сначала создать массив ссылок на обьекты, а потом инициализировать каждый по отдельности в цикле.
Тут опять торможу. А разве массивы ссылок бывают? Ссылку понимаю как объявить:
А как массив?
Тут опять торможу. А разве массивы ссылок бывают?
конечно
Только тут я неверно выразился, вам нужен не массив ссылок, а массив указателей.
И. кстати, тип переменной tsButton2_ptr в моем примере из сообщения #17 будет не TsButton* , а TsButton**
как-то так
Спасибо, именно это и пытался сообразить. Меня смутил "массив ссылок", и пропустил "массив указателей на указатели". В таком виде работает как мне нужно:
В догонку вопрос по очистке памяти - так нормально будет?
Зависит от того, насколько "умный" менеджер памяти.
Я предпочитаю удалять в порядке обратном выделению.
Да, спасибо за замечание, переделал.
void deleteButtonsArray() {
Тут "программист" дурак на всю голову, а вы про умный менедрер памяти. :)
Можете поподробнее раскрыть этот момент (ссылку где почитать либо кусок кода)? В поиске натыкаюсь в основном на: (почти)никода нельзя использовать new и delete, используйте vector, контейнеры и ты ды.
Вопрос кстати про delete и delete[] (код в этом сообщении) - мне кажется что в цикле нужно использовать delete (ведь удаляем не массивы, а элементы массива), а за циклом delete[] для удаления массива. Но в учебнике в примере (ravesli) используется delete[] как в цикле, так и вне цикла, что меня ставит в тупик. Компилятор принимает оба варианта. Подскажите как правильно освободить память в данном случае.
Ну и в догонку вопрос - а можно обойтись для рашения этой задачи без использования динамической памяти? В голову приходит сходу объявление глобального массива tsButton максимально возможного размера в стеке, и наполнение его требуемыми по ходу выполнения программы данными, но не хочется (жаба давит) чтобы постоянно была занятой память (tsButton * 10). Хотя опять же для микроконтроллеров читал что следуют всячески избегать использования динамической памяти.
Я, конечно же, не настоящий самурай ))) Но что-то мне подсказывает, что вместо подобного массива удобнее использовать одно/двух-связанный список (если речь про динамически изменяемый размер). Но может быть опять не понял что ТС хочет.
Ну и в догонку вопрос - а можно обойтись для рашения этой задачи без использования динамической памяти?
А вы поподробнее опишите "эту задачу". Я так понял, динамический массив - для элементов меню? Вы его многократно создаете и уничтожаете в ходе работы программы?
А вы поподробнее опишите "эту задачу". Я так понял, динамический массив - для элементов меню? Вы его многократно создаете и уничтожаете в ходе работы программы?
Да, именно так, многоуровневое меню, на некоторых уровнях количество пунктов больше, чем влазит за раз на экран, идея в том чтобы динамически формировать "кадр" из объектов которые размещены на экране и соответственно удалять обекты когда они выходят за рамки экрана и более не нужны.
Делаю обектами, чтобы после получения координат точки нажатой на тачскрике, пробегать по массиву обектов и через перегруженный оператор== проверять равенство полученной точки нажатия и кнопки, соответственно обрабатывать нажатие. Ну и опять же изучаю главу ООП, срочно хочется куда-то применить полученные знания :)
Ну это и есть список, так то...
попробуй так
https://arduino.ru/forum/otvlechennye-temy/kudryavaya-initsializatsiya-s...
шаблоном будет указатель на класс, в скобках - конструкторы new()
Создай массив указателей без new.
В цикле для каждого элемента отдельно вызывай new c входными параметрами конструктора поиндексно. Передавай нужные параметры при каждом индексе.
Если нужно только инициализировать, то встроение в цикл не работает?