- 1
Block *** Cells;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+148
Block *** Cells;
Лаконичная семантика C++.
Глядишь на код -- и всё понятно: Cells - это указатель массива указателей на массивы указателей объектов класса Block.
А устно с первого раза хрен выговоришь.
где здесь говнокод?
И вообще это можно интерпретировать как сишный указатель на трехмерный массив.
зы: аффтор осуждает непонятные ему конструкции языка, которым он по всей видимости не очень владеет...
(предположительно перешёл с паскаля или с какого-то языка, в котором нету явной работы с памятью)
>>указателей объектов класса Block.
Всё-таки соизволил. Словестно.
facepalm.jpg
Во-вторых, это пока ещё указатели на указатели и так далее, пока это всё не инициализировано. А каждый указатель на указатель массивов указателей объектов может быть инициализирован своей длиной. И получится, например, треугольный массив указателей, который до трёхмерного не дотягивает примерно полтора измерения.
Cells[x][y][z]
До трех умеешь считать?
для создания двумерной матрицы(NxM) объектов нужно выполнить такие действия:
если пишет не дурак, то там будут проверки:
if (Cells[i][k]) //проверяем был ли создан объект
{
// работаем с классом:
// если инициализация провалилась
// посыпятся либо ошибки(по Сишному),
// либо Эксепшены(по Цпп"шному)
}
так что это "минное поле" - не представляет особой угрозы...
а если пишет кто-то без опыта, то там даже с одиночным объектом могут быть проблемы ;)
2% не обязательно вызывать delete для каждого элемента массива;
delete[] с этим прекрассно справляется
(правда вот на счёт вызовов деструкторов хз как там будет)
Да вы ебанулись, парни(с)
у меня почемуто всё в нули выводит...
NULL == (long) 0;
А вообще, вы что-нибудь слышали об неинициализированной памяти ?
"об неинициализированной памяти"
я не слышал, но решил прогуглить: узнал новое про неинициализированны указатели и опасность их появления (спасибо)
но оное представляет опасность, если код пишет какой-то имбицыл, который вовсе не понимает что делает
зы: надеюсь вы поведаете еще что-то интересное (желательно с пруфлинком)
Читайте лучше книжки хорошие.
(когда-то решил прочитать трупастрауса - руководство по С++
- полезной инфы почти не получил)
так что в книги я не верю =(
лучше уж какие-то сухие мануалы, без лишнего текста, типа:
(проблема):
(причины возникновения);
(способы борьбы);
(примечания);
всё зависит от умения анализировать информацию
----------
говонокод.ру - это не только развлекательный ресурс;
тут можно узнать полезную инфу:
- ошибки других (дабы не делать свои)
- правки в коментах
- анализ кода на гавно
- интересные идеи реализации
т.п.
>- полезной инфы почти не получил) ...
>...всё зависит от умения анализировать информацию
Странно видеть две этих фразы от одного человека :)
С++
по этому там почти ничего нового не узнал;
Вот например такие массивы используют потому итерирование по массиву бытрее, чем по контейнеру. Но если там половина нулевых указателей, нафиг это надо? Чтобы писать while(!++Cells); да?
------
мои посты были о том, что всякого рода ошибок можно избежать...
ну а вообще, лучше все эти ошибки присекать на этапе проектирования, дабы потом не приходилось делать заплатки...
Ошибок также можно избегать до их появления, не применяя опасные идеи и техники, в конце концов если что не так, то сам программист за это и отвечает как ты уже сказал. К тому же ты уже успел выстрелить себе в ногу, предположив что что-то всегда инициализируется нулями при распределении памяти.
а чего минусы? тут что-то не так?..
А вот приведение типа : - это просто здец!
ну вот, 2 года верил препу, что это правильный способ выделения памяти
а сейчас получив замечание - попробовал иначе, и познал истину
- всётаки, что не говорите, но тут можно получить некие знания... вот как сейчас ;)
new Block**[row_count];
пошёл думать, как тут 1 циклом обойтись...
а двумерный массив объектов(с вызовом конструктора) - через вложенный цикл(как мну писал), либо через 2 отдельных цикла;
иль я снова не прав?(
Не говнокод, полюбому. Цивильное обсуждение.
Пусть и не говнокод, зато документацию нужно читать, даже если очень лень читать конструкции букафф типа "Cells - это указатель массива указателей на массивы указателей объектов класса Block". А то тут уже кому-то трехмерные массивы мерещатся.