|
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
|
||||||
Проверить на выход за границы массива05.05.2013, 12:39. Показов 25781. Ответов 44
Метки нет (Все метки)
ПРивет, помогите пожалуйста, пишу класс - динамический массив, в перегрузке оператора [] нужно проверить на выход за границы, но не знаю как правильно использовать try, catch, throw.
0
|
||||||
| 05.05.2013, 12:39 | |
|
Ответы с готовыми решениями:
44
Выход за границы массива Выход за границы массива Массивы: Проверка на выход за границы массива |
|
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
|
|||||||
| 05.05.2013, 20:20 [ТС] | |||||||
|
задание просто такое, получил такой код:
я не понял только где у меня
0
|
|||||||
|
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
|
|
| 05.05.2013, 20:27 [ТС] | |
|
я же просто выделил память и ничего больше
0
|
|
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
| 05.05.2013, 20:28 | |
|
Так new для каждого элемента вызывает конструктор по умолчанию (для классов).
1
|
|
|
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
|
|
| 05.05.2013, 20:29 [ТС] | |
точно, подскажите тогда как мне переделать
0
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||
| 05.05.2013, 21:40 | ||
|
Как сделать exception-safe копирование динамического массива без вызова конструкторов по умолчанию я уже говорил: специальный хитровы
1
|
||
|
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
|
|
| 05.05.2013, 21:54 [ТС] | |
|
это про scoped_partially_initialized_array ?
0
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 05.05.2013, 22:02 | |
|
Ага. У него:
1
|
|
|
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
|
|
| 06.05.2013, 00:05 [ТС] | |
|
большое спасибо, сейчас начну делать
Добавлено через 2 часа 0 минут я пишу класс по пунктам, которые вы перечислили, но кажется я не понял всю логику. в метод init я буду отправлять по одному элементу, который нужно скопировать, в этом методе будет происходить инициализация внутреннего указателя класса, я так понял, что здесь нужно вызывать констр. копирования вручную? после того как все элементы будут отправлены в метод init, методом get я должен буду получить все скопированные значения(из внутр. указ.)? еще нужно будет перегрузить операторы new, delete и в конструкторе память выделять как обычно p = new T[size]; а где и когда вызывать вручную деструкторы?
0
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||||||
| 06.05.2013, 00:41 | ||||||
|
Вот что за петух вас клюнул?
У вас не продакшн-левел библиотека массивов, подобные извращения тут ни к чему.Эта штука нужна для exception-safety при копировании массива. Её задача: или выдать вам в конце концов указатель на массив из корректно скопированных элементов, или аккуратно удалить весь мусор в случае выброса исключения в процессе копирования. Любого исключения, будь-то память не выделилась или конструктор копирования облажался. Если бы вам кое-кто не подкинул мысль, что конструктор по умолчанию может и не существовать, то достаточно было бы примитивного варианта в три строки со временным массивом. Перегружать ничего не надо. Это именно что такие функции, которые именно так и вызываются:
Конструктор копирования с помощью placement new вызвается в том init(). get() возвращает тот указатель на массив, что вернул operator new[](), и в котором проводил инициализацию init(). После этого данный объект забывает этот указатель. Он передал ему тому, кто вызвал get(). Деструкторы вызываются в деструкторе этого класса. Вызывать их надо только для того, что было проинициализировано (надо помнить, какой кусок массива был проинициализирован, а какой — нет). И только в том случае, если get() не был вызван до этого. Ещё раз говорю: забейте. Если вы не знаете, зачем это надо, то оно вам не надо. YAGNI.
1
|
||||||
|
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
|
|
| 06.05.2013, 01:00 [ТС] | |
|
теперь я обязательно должен это сделать )
0
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 06.05.2013, 01:14 | |
|
Как сделаете, вперёд читать про RAII и умные указатели
Так называется общий к вот таким штукам.
0
|
|
|
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
|
|||||||||||
| 06.05.2013, 18:48 [ТС] | |||||||||||
|
наброски класса сделал, только проблема с деструктором, вот сам класс:
0
|
|||||||||||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 06.05.2013, 20:11 | |
|
Ага. Теперь вопрос. Второй шаблонный параметр Ex. Он намеренно не используется? Попробуйте ответить на вопрос, что лучше и почему: шаблонный параметр, задающий максимальный размер копируемого массива, или вон та чиселка в конструкторе.
Насчёт деструктора. В Array его вызывать не надо, он сам вызовется. Что он должен делать: 1) вызывать деструкторы для инициализированных элементов массива, на который указывает p; 2) вызывать operator delete [] для самого p; 3) не делать всего этого, если до этого был вызван метод get(). Деструктор в любом случае вызывается: завершилось ли копирование успешно или нет. Но идея в том, что он должен очищать память только в том случае, если копирование завершилось неуспешно (было выполнено частично). Если пользователь Ex забрал массив с помощью get(), то копирование считается выполненным успешно. Подумайте, как Ex может эффективно хранить информацию о том, что было инициализировано, а что нет. Подсказка: учтите то, что сценарий использования у Ex только один — это оператор присваивания (ещё примерно то же стоит сделать и в конструкторе копирования). Не по теме: Не слушайте упоротых, которые верещат, что точка выхода из функции должна быть единственной. if (this == &arrayForAssign) return *this; в начале, а потом ещё один раз return *this; в конце — это нормально. Эффект тот же, читается субъективно понятнее и нет непонятного мегауровня вложенности.
1
|
|
|
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
|
||||
| 06.05.2013, 20:52 [ТС] | ||||
|
а над этим еще буду думать
0
|
||||
| 06.05.2013, 21:01 | |
|
Не по теме: OhMyGodSoLong, а не проще задействовать уже готовый аллокатор?
0
|
|
| 06.05.2013, 21:11 | |
|
Не по теме: А есть готовый? Который выделяет память под массив и инициализирует его содержимым другого массива без вызовов дефолтных конструкторов? Все эти костыли ж только ради выделенной части.
0
|
|
| 06.05.2013, 21:20 | |
|
Не по теме: std::allocator и std::uninitialized_copy решают проблему
1
|
|
| 06.05.2013, 21:30 | |
|
Не по теме: Дайте я вас расцелую :)
0
|
|
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|||||||
| 07.05.2013, 19:24 | |||||||
0
|
|||||||
| 07.05.2013, 19:24 | |
|
Выход за границы массива Выход за границы массива Выход за границы массива
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
|
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
|
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения.
https:/ / habr. com/ ru/ sandbox/ 295048/
начало и оглавление
-
Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0)
Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона
Уважаемые коллеги!
В продолжение. . .
|
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии
Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
|