|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.06.2019, 13:26 | #21 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
вот к чему ты сейчас это написал? тебе не кажется, что вот это твое сообщение не имеет никакой логической связи с предыдущими? у нас из-за этого что ли будут большие проблемы, если мы напрямки new/delete заюзаем? 2. вот ты привел цитату человека. ты сам читал его сообщение? ты понял, что хотел сказать, и о чем хотел спросить человек? человек обратил внимание, что delete[] каким то образом сама определяет количество элементов. и вот у него возникло два вопроса: как это делает delete[], и можно ли ему тоже как то получить доступ к этой информации. и вот нафига ты сейчас приплел контейнеры, которые в контексте темы вообще никак не фигурируют? такое впечатление, что ты вообще не вникаешь в суть написанного. и отвечаешь невпопад. |
|
05.06.2019, 13:38 | #22 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Ну так на исходный вопрос сразу ответили, а потом просто подсказали, что в С++ как правило лучше использовать стандартные контейнеры.
Но да, формулировка про большие проблемы и внезапный переход к этому от скорости — не очень.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
05.06.2019, 16:02 | #23 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,343
|
Это выделение памяти.
Массив вы создадите, но передать его никуда не сможете. Обязательно может и не возникнут но вероятность гораздо больше. Я насмотрелся на утечки памяти, юзайте new/delete напрямую, а я уж лучше через смарт. Так надо думать, что делать. Можно сделать и так, чтоб уменьшения скорости (overhead) не было совсем. Если например будете все время передавать std::vector по значению то будет ой-ой. А если передавать просто указатель и размер всегда вместе, то никакой разницы не будет, от слова совсем. Потому что контейнеры обеспечивают документированный способ получать размер массива. new/malloc документировано такой информации не дают |
05.06.2019, 20:59 | #24 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
да утечки ладно, не жалко.
Я вот недавно в одном проекте любителя new/delete (с вроде как кучей лет опыта, хотя вроде больше по С) постоянно натыкался на креши из-за повторных delete, выходов за пределы переиспользуемого в разных местах массива и прочей фигни.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
06.06.2019, 16:51 | #25 | ||||
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
то бишь, ты пишешь, что я создаю массив, но массивов в с/с++ нет? ты осознаешь насколько долбанутый бред у тебя получается? ты определись: так массивы в с/с++ существуют, или нет? вот это что за бред ты несешь? что значит слово "скорее" ? ты что тут гаданием что ли занимаешься? не нужны никакие домыслы. просто открой учебник и почитай, что означает синтаксис и что значит "но передать его никуда не сможете"? массив можно передать по значению, как поле структуры. либо передать как указатель на первый элемент. либо по ссылке. https://rextester.com/VROT93625 Код:
вывод в консоль: Код:
но ты же написал, что не просто могут возникнуть, а уже и при том - большие. ты собственный текст то читал? Цитата:
а лишь о вероятности их появления? проблем оказывается вообще может и не быть? видишь как сильно начинают меняться показания, когда приходится не только писать, но ещё и думать о чем пишешь. вот ты пишешь: "но вероятность гораздо больше". больше чем что? если тезис использует сравнение, то обязательно нужно декларировать с чем именно производится это сравнение. а иначе тезис получается глупым. фиг знает, что там у автора было в голове. например это можно понять, как: при использовании new/delete вероятность возникновения проблем больше, чем в случае не использования онных в коде. ну да. вот у одного парня никогда не было девушки. соответственно, и проблем, связанных с девушками у него тоже нет и никогда не было. это как бе капитанская очевидность. и что? не иметь дел с девушками что ли теперь? Цитата:
не сталкивался с проблемой утечек памяти. это очень легко понять. либо утечки есть, но они настолько незаметные, что люди их просто не замечают. а значит такие утечки не являются проблемой этих людей. либо утечки действительно создают проблемы. но такие утечки - априори уже известны по определению понятия "проблема" а значит не составляет особого труда их устранить. вот и получается: либо утечки есть, но слишком незаметные, и поэтому никого не парят либо заметные - но такие сразу устраняются и проблем опять таки нет. а ты пишешь про большие проблемы. про то, что ты уже насмотрелся на эти ужасы. ты пишешь это так, словно сыт утечками по горло! мне сложно даже представить что такого ты мог "насмотреть" твой взгляд на вещи противоречит здравому смыслу. Цитата:
И вот нафига было преплетать контейнеры, которые не имеют к delete[] ни малейшего отношения? я афигиеваю с людей. вы вообще думаете о том, чято пишите/читаете? - который час? - вам обязательно нужны контейнеры! если у вас нет контейнеров - у вас большие проблемы! - лять, вот нахрена мне ваши контейнеры, если я спросил который час????? - у нас нет документации на часы, зато есть документированный способ получить размер массива.... |
||||
06.06.2019, 17:19 | #26 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
стандарт тогда уж, мало ли кто там что в учебниках написать решил.
Цитата:
А про delete[] ответили сразу, так что аналогия опять неудачная.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
06.06.2019, 17:23 | #27 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
_Bers, я как человек очень далёкий и от C и от C++ хотел бы спросить Вас.
в рамках исходного вопроса: Цитата:
вывести их содержимое на экран, например. Вы могли бы изменить свой пример для иллюстрации? |
|
07.06.2019, 01:47 | #28 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,343
|
Курсив мой, для меня тема закрыта - массив не есть указатель.
Если будем считать указатели массивами, тогда массивы есть и в ассемблере. Пользуйтесь new/delete на здоровье, мне фиолетово. Если можете написать что-то сложнее hello world и ни разу не допустить ошибок с памятью - флаг вам в руки. И не надо городить мне кучу кода - С++ я знаю не хуже вас, если не лучше. Да, потому что я задолбался их искать и править. Поработайте с проектом в 20К файлов и поговорим опять. Во первых, на вопрос был дан ответ. Во вторых, контейнеры приплел не я, читайте тему внимательно. Тем не менее, если требуется знать размер выделенной памяти я полностью поддерживаю данную рекомендацию. Когда комп поработает пол-года это становиться заметным - вот подите и найдите такие утечки. |
07.06.2019, 11:04 | #29 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Цитата:
Но конечно я считаю, что в С++ "по умолчанию" надо брать контейнеры, смарт указатели и т.д., а на new/delete переходить только если есть какие-то веские причины для этого.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
07.06.2019, 12:19 | #30 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Существуют "массивы данных" которые можно аллоцировать в куче. Существуют высокоуровневые "контейнеры" - особые типы данных, которые предоставляют удобства цивилизации и надежную работу. https://rextester.com/GDOAM4087 Код:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как освободить память от типа Audio? | reyn90 | Общие вопросы .NET | 6 | 26.12.2015 23:21 |
Освободить память формы | st_yak | C++ Builder | 0 | 21.12.2013 19:56 |
Проверить выделена ли память под объект | Sibedir | Общие вопросы Delphi | 58 | 21.03.2011 11:48 |
Освободить память от CEdit | Eros | Общие вопросы C/C++ | 0 | 29.11.2010 15:37 |
Неправильно выделена память. С++ | Purr | Помощь студентам | 7 | 31.10.2010 20:05 |