![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| TarasProger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Есть класс. Пусть его зовут TItem. Есть другой класс, пусть его зовут TRow и класс этот имеет поле Items тип которого - указатель на TItem. Третий класс по имени, например, TPlane, имеет поле Rows, тип которого - указатель на TRow. В конструкторе TPlane по Rows выделяется память для массива с базовым типом TRow, при этом по Items каждого элемента требуется выделить память для массива с базовым типом TItem. Правильно ли будет написать:
Это сообщение отредактировал(а) TarasProger - 14.8.2015, 18:02 |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Критерии правильности зачастую сильно субъективны. Лично я так бы не написал. Приведённый код излишне сишный. Особенно проверки на nullptr. В современном мире new бросает исключение при невозможности выделить память, а nullptr никогда не возвращается:
Проблема возникла из-за того, что n и m - нефиксированы в программе, а в классе TRow очень не хочется хранить размер массива TCell? Или по какой-то другой причине? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
В принципе, в таких случаях обычно делают так:
Аналогично удаление массива. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| TarasProger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Бросило оно исклюкаку. Дальше что? Бросить объект как попало? Начать его чистуку? Откуда? Как? Ладно ещё стояла бы задача обработать в вызывающем кода ошибку в функции, вызванной из вызванной. Тогда исключения адекватны. А когда ошибка ловится в месте возникновения, то большей пакости нет, чем исклюкака, искусственно уводящая обработку ошибки в даль от места её возникновения и выбрасывающая информацию об этом самом месте. Добавлено @ 10:24
Добавлено @ 10:27 Он там и хранится. Просто массив должен быть строго прямоугольным и ни в коем случае не ступенчатым. Добавлено @ 10:28 Мешает явной проверке, так будет правильней. Это сообщение отредактировал(а) TarasProger - 15.8.2015, 10:40 |
|||
|
||||
| TarasProger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Энто что за абракдабра? Добавлено через 1 минуту и 38 секунд По-Вашему один и тот же код в зависимости от каких то субъективностей будет вести себя различно? К сожалению на моей планете маги не живут. |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Ну, если Вы не в состоянии понять простых вещей (когда создаётся не массив экземпляров класса, а массив указателей, который затем инициализируется экземплярами класса с вызовом конструктора не по умолчанию), тогда до свидания. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| TarasProger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Ах вот это что! А я то думал, почему указатель двойной. Только что это даёт? Добавлено @ 13:12 А может здесь maloc поможет? А то всё таки во внутренности другого класса лезть не охота. Как явно вызвать конструтор по указателю? Это сообщение отредактировал(а) TarasProger - 15.8.2015, 13:20 |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Вызов конструктора не по умолчанию. Добавлено @ 13:23 Placement new. Это сообщение отредактировал(а) feodorv - 15.8.2015, 14:26 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Нет. Увы, TarasProger, Вы очень часто демонстрируете непонимание своего собеседника или поставленной задачи, уводя разговор на совсем другие рельсы. Я про поведение одного и того же кода не говорил ни слова. Вы спросили:Следовательно, речь идёт не об одном и том же коде, а о наиболее понятном, лаконичном (где-то даже красивом) и безошибочном способе написания кода для решения задачи. Восприятие кода по этим критериям, зачастую, является субъективным. Приведённый Вами код - рабочий, следовательно, можно про него сказать, что он "правильный". Тем не менее, глядя на свой код, Вы задались подобным вопросом, значит в нём есть что-то, Вас не устраивающее. Меня же в нём не устраивает всё. От явного ощущения, что это не C++, и до организации классов. И эта моя субъективность имеет, скорее всего, объективный характер - уверен, что данный код мало кому понравится. Это сообщение отредактировал(а) feodorv - 15.8.2015, 13:51 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| disputant |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 28.11.2011 Репутация: нет Всего: 3 |
new(std::nothrow) вам в помощь. Все равно обработка нехватки памяти практически всегда сводится к убиению программы... |
|||
|
||||
| TarasProger |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Речь была о правильности, а не красивостях. Добавлено через 3 минуты и 54 секунды
Добавлено через 5 минут и 9 секунд
|
||||
|
|||||
| disputant |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 28.11.2011 Репутация: нет Всего: 3 |
Почитайте на эту тему Саттера, "Новые сложные задачи на С++", задача 23 (стр. 156-162). Наши желания не всегда совпадают с нашими возможностями |
|||
|
||||
| TarasProger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Вот именно.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |