- 1
Block *** Cells;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+148
Block *** Cells;
Лаконичная семантика C++.
Глядишь на код -- и всё понятно: Cells - это указатель массива указателей на массивы указателей объектов класса Block.
А устно с первого раза хрен выговоришь.
absolut 30.07.2010 22:33 # +5
ch 30.07.2010 22:35 # +5
где здесь говнокод?
И вообще это можно интерпретировать как сишный указатель на трехмерный массив.
Kornew 30.07.2010 22:42 # −3
зы: аффтор осуждает непонятные ему конструкции языка, которым он по всей видимости не очень владеет...
(предположительно перешёл с паскаля или с какого-то языка, в котором нету явной работы с памятью)
maniac 30.07.2010 22:49 # 0
>>указателей объектов класса Block.
Всё-таки соизволил. Словестно.
TarasB 31.07.2010 15:48 # 0
facepalm.jpg
bugmenot 26.08.2010 18:03 # +2
maniac 30.07.2010 22:47 # −1
Во-вторых, это пока ещё указатели на указатели и так далее, пока это всё не инициализировано. А каждый указатель на указатель массивов указателей объектов может быть инициализирован своей длиной. И получится, например, треугольный массив указателей, который до трёхмерного не дотягивает примерно полтора измерения.
ch 30.07.2010 22:52 # 0
Cells[x][y][z]
До трех умеешь считать?
maniac 30.07.2010 22:57 # 0
ch 30.07.2010 23:00 # 0
maniac 30.07.2010 23:21 # +3
Kornew 30.07.2010 23:02 # −1
для создания двумерной матрицы(NxM) объектов нужно выполнить такие действия:
maniac 30.07.2010 23:16 # 0
ch 30.07.2010 23:43 # 0
Kornew 31.07.2010 00:21 # 0
если пишет не дурак, то там будут проверки:
if (Cells[i][k]) //проверяем был ли создан объект
{
// работаем с классом:
// если инициализация провалилась
// посыпятся либо ошибки(по Сишному),
// либо Эксепшены(по Цпп"шному)
}
так что это "минное поле" - не представляет особой угрозы...
а если пишет кто-то без опыта, то там даже с одиночным объектом могут быть проблемы ;)
ch 31.07.2010 04:38 # +1
Kornew 31.07.2010 07:16 # −2
2% не обязательно вызывать delete для каждого элемента массива;
delete[] с этим прекрассно справляется
(правда вот на счёт вызовов деструкторов хз как там будет)
Altravert 31.07.2010 07:31 # +2
Да вы ебанулись, парни(с)
Kornew 31.07.2010 11:50 # −1
у меня почемуто всё в нули выводит...
NULL == (long) 0;
absolut 31.07.2010 11:55 # +4
А вообще, вы что-нибудь слышали об неинициализированной памяти ?
Kornew 31.07.2010 17:12 # −2
"об неинициализированной памяти"
я не слышал, но решил прогуглить: узнал новое про неинициализированны указатели и опасность их появления (спасибо)
но оное представляет опасность, если код пишет какой-то имбицыл, который вовсе не понимает что делает
зы: надеюсь вы поведаете еще что-то интересное (желательно с пруфлинком)
absolut 31.07.2010 18:01 # +3
Читайте лучше книжки хорошие.
Kornew 31.07.2010 18:12 # −1
(когда-то решил прочитать трупастрауса - руководство по С++
- полезной инфы почти не получил)
так что в книги я не верю =(
лучше уж какие-то сухие мануалы, без лишнего текста, типа:
(проблема):
(причины возникновения);
(способы борьбы);
(примечания);
Altravert 31.07.2010 18:55 # +2
Kornew 31.07.2010 18:24 # 0
всё зависит от умения анализировать информацию
----------
говонокод.ру - это не только развлекательный ресурс;
тут можно узнать полезную инфу:
- ошибки других (дабы не делать свои)
- правки в коментах
- анализ кода на гавно
- интересные идеи реализации
т.п.
absolut 31.07.2010 19:59 # +1
>- полезной инфы почти не получил) ...
>...всё зависит от умения анализировать информацию
Странно видеть две этих фразы от одного человека :)
Kornew 31.07.2010 21:05 # −2
С++
по этому там почти ничего нового не узнал;
ch 31.07.2010 14:10 # 0
Вот например такие массивы используют потому итерирование по массиву бытрее, чем по контейнеру. Но если там половина нулевых указателей, нафиг это надо? Чтобы писать while(!++Cells); да?
Kornew 31.07.2010 16:38 # 0
------
мои посты были о том, что всякого рода ошибок можно избежать...
ну а вообще, лучше все эти ошибки присекать на этапе проектирования, дабы потом не приходилось делать заплатки...
ch 31.07.2010 22:16 # 0
Ошибок также можно избегать до их появления, не применяя опасные идеи и техники, в конце концов если что не так, то сам программист за это и отвечает как ты уже сказал. К тому же ты уже успел выстрелить себе в ногу, предположив что что-то всегда инициализируется нулями при распределении памяти.
Kornew 31.07.2010 17:26 # 0
а чего минусы? тут что-то не так?..
absolut 31.07.2010 20:32 # +3
А вот приведение типа : - это просто здец!
Kornew 31.07.2010 21:24 # 0
ну вот, 2 года верил препу, что это правильный способ выделения памяти
а сейчас получив замечание - попробовал иначе, и познал истину
- всётаки, что не говорите, но тут можно получить некие знания... вот как сейчас ;)
new Block**[row_count];
пошёл думать, как тут 1 циклом обойтись...
Kornew 31.07.2010 21:39 # 0
а двумерный массив объектов(с вызовом конструктора) - через вложенный цикл(как мну писал), либо через 2 отдельных цикла;
иль я снова не прав?(
Altravert 31.07.2010 07:07 # 0
Не говнокод, полюбому. Цивильное обсуждение.
maniac 31.07.2010 09:53 # −1
Пусть и не говнокод, зато документацию нужно читать, даже если очень лень читать конструкции букафф типа "Cells - это указатель массива указателей на массивы указателей объектов класса Block". А то тут уже кому-то трехмерные массивы мерещатся.
Altravert 01.08.2010 20:06 # +1