+58
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
void Model::setPosition(GLfloat x, GLfloat y, GLfloat z) {
if (m_position == NULL) {
m_position = (float *) malloc(3 * sizeof(float));
}
if (m_position != NULL) {
m_position[0] = x;
m_position[1] = y;
m_position[2] = z;
}
}
void Model::setRotate(GLfloat x, GLfloat y, GLfloat z) {
if (m_rotate == NULL) {
m_rotate = (float *) malloc(3 * sizeof(float));
}
if (m_rotate != NULL) {
m_rotate[0] = x;
m_rotate[1] = y;
m_rotate[2] = z;
}
}
http://code.google.com/p/forget3d/
Во первых, умиляет умение людей взяв современный супернавороченый удобный автомат, вместо того чтоб нажать на курок и выстрелить в противника, взять этот автомат наперевес как дубинку, и идти им пиздить противника по голове. Я о сишке, слегка прикрытой крестами.
И во вторых, этот код при недостатке памяти просто нифига не делает, что чревато непонятками - вроде и повертел модель, вроде и подвинул, а оно никак не вертится и не двигается.
Запостил:
Pythoner,
27 Августа 2014
Недостаток памяти всегда чем-то чреват. И неважно где это на стеке или в куче.
Edit: впрочем kipar выше об этом уже написал.
И если не хватает чистить все booststd::weak_ptr и кеши?
> чистить все std::weak_ptr
А чего их чистить? Они вроде сами очищаются при уничтожении последнего shared_ptr, GC ждать не надо.
Так нам надо их почистить не на последней ссылке, а по нехватке памяти.
Юзать new, оно кидает исключение.
Ваш кэп.
Можно линк?
Они так говорят, как-будто new для примитивов что-то инициализирует.
А если ты напишешь pod без дефолтного конструктора - там что new, что malloc нихера не будут инициализировать:
std::auto_ptr + malloc - не надо так
всё выделенное malloc-ом должно быть освобождено как free, а не delete
Я знаю, что его нельзя юзать для массивов.
В шестом говнобилдере он не deprecated.
Но зачем?
Есть такое слово - legacy.
operator new(size_t), не?
Или что-нибудь вроде Поскольку с исключениями работать не умеют
В gcc - только когда бросаются. В остальное время они вообще никак не влияют, помимо раздувания бинарника
Там код с try/catch даже может работать быстрее кода с ифами, если исключение не бросается - на успешном пути не будет лишних проверок и переходов.
А так - да, Мне кажется так в любом языке - если исключения не выпадают то возвратов тупо нет.
Ну вот не читается у меня файл, оборвался сокет, не спарсился XML - это всё ненормальные ветки, они не исполняются когда всё ок. Вот для них такие исключения идеальны, и код будет работать чуть быстрее, чем с if'ами.
А всё подряд на исключениях делать глупо, я не спорю. Если ветки равновероятны - какая ж это исключительная ситуация?
while (!solution_found())
С ними работать удобней - не надо базис индукции писать.
Не помню, выкладывал ли я МНК, в котором строится бесконечная система уравнений с бесконечным числом переменных, а потом прямо так и приводится к треугольному виду. К сожалению последний шаг в бесконечности не получился ;(
Впрочем, я понял тебя - ты имеешь в виду функции, которые принципиально должны работать лишь с бесконечными списками (вроде преобразований эйлера для бесконечных рядов). Там исключение будет где-нибудь в head пустого списка :)
ХБЗ.
Химическо-биологическая защита?
Хлопчатобумажный зипун?
Hemoglobin subunit zeta?
Handwerksbildungszentrum?
Hemorrhagic Bowel Syndrom?
Эээ. Ну вообще-то всё зависит от выбранной схемы EH.
dwarf - без переголовы.
sjlj немного-таки просаживает пирфоманс, даже если исключение не бросается!
Дадад. Когда будешь линковать с кодом скомпиленным с другим EH или вообще без инфы о unwinding (сишка) тогда поймешь ценность sjlj.
Кстати как там у dwarfa c 64-битными платформами?
fxd
unwind через область с чужеродным EH - в любом случае игра на грани фола.
Эээ, а как sjlj тут поможет?
>Кстати как там у dwarfa c 64-битными платформами?
Под юниксами есть, про венду не знаю. На IA64, кстати, dwarf -- стандартный способ делать EH.
Через калбеки winApi dw2-исключение не пройдёт, sjlj - со свистом.
Борманд выше правильно поправляет: под виндой sjlj неизбежен. sjlj - совместимость, dw2 - производительность. Трейдофф.
Здесь принимается что sizeof(GLfloat) == sizeof(float), что логически вроде и обосновано, хотя стандарт этого не обещает. Интересно, есть ли системы где это не так?
Нет. Мы ведь не видим определений m_position и m_rotate. Если там просто float - то всё норм...