ПрограммированиеФорумОбщее

C++: каждый класс в своём модуле. В чём прикол? (22 стр)

Страницы: 121 22 23 2426 Следующая »
#315
13:55, 15 мар 2012

zlos
> Кидаем исключение, исключение летит, объекты сами убиваются при выходе за
> области видимости.

Я веду речь о ситуации, когда нам не нужно убивать все объекты, а наоборот - стоит задача "держаться до последнего".
И вообще, вы там не в idSoftware работаете? Мне за Rage, который вылетал каждые 5 минут убивать охота.

#316
13:57, 15 мар 2012

Ogra
> стоит задача "держаться до последнего"
Это как вообще? Если вы не можете выделить например память - вы не можете продолжать текущую работу и должны вернуться куда то назад откуда уже можно попробовать что то другое.

#317
14:07, 15 мар 2012

zlos
Не всегда вернуться куда-то
Пример - в менеджере ресурсов 2000 объектов, нужно добавить еще 10.000, загрузив их по сети, но на 5.000 возникает исключение - "Нельзя прочитать файл". Падать из-за обрыва на линии? Убивать закачанные 5.000 объектов? Запускать программу без нужных данных?

#318
14:12, 15 мар 2012

DevilDevil
>архитектуру надо проектировать так, чтобы exception-ов не было
Покажи мастер-класс:

vector.size = 100500;
vector.size = -1;

img.load("./file_not_exist.xpm");

shader.compileFromeFile("./bad_syntax.cg");

img = Image("./file_not_exist.xpm");

render.start( lost_devie );

Pushkoff
> моя парадигма мышления называется KISS, почитай о ней в интернете
Адаптация для русских :)

zlos
> Кидаем исключение, исключение летит, объекты сами убиваются при выходе за
> области видимости.

{
  beginAlgo( some_data );
  vector<int> tmp;

  while( tmp.size() ){
    tmp.resize( algoStep(some_data) );
    // ловим out_of_memory и...
    }

  endAlgo();
  }
#319
14:17, 15 мар 2012

Ogra
> Падать из-за обрыва на линии? Убивать закачанные 5.000 объектов? Запускать программу без нужных данных?
продолжай. а то не понятно к чему ты это написал.

#320
14:18, 15 мар 2012

Try
> { beginAlgo( some_data ); vector<int> tmp; while( tmp.size() ){ tmp.resize(
> algoStep(some_data) ); // ловим out_of_memory и... } endAlgo(); }
ты хочешь написать тут
finally {
  endAlgo();
}
да?

#321
14:20, 15 мар 2012

Try
Ага, можно подумать, что исключения (только обязательно с finally! ;) ) вдруг сразу волшебным образом решают проблему консистентность данных при возникновении нештатной ситуации...

#322
14:25, 15 мар 2012

Try
> vector.size = -1; // wtf ?

Pushkoff
человек не обладающий здоровой долей сомнения - обречён развиваться крайне медленно
человек не дающий себе права ошибаться - стоит на месте

можно конечно считать что угодно
но не изучив вопрос, не попробовав - по меньше мере глупо

#323
14:28, 15 мар 2012

yatagarasu
нет, я не об этом.
Я о том, что часть действий, который нужны алгоритму нам удалось выполнить, при этом мы меняли some_data, а потом обнаружили, что дальше работать не можем.
Здесь, ни GC, ни RAII не помогут.

К примеру мы пытались сделать счетную сортировку ( которой как-раз нужна дополнительная память ) и получили out_of_memory на середине - надо бы откатить some_data к исходному состоянию, но не получится сделать это просто.

#324
14:28, 15 мар 2012

yatagarasu
Речь о том, что иногда даже при исключении "нехватка памяти" можно не ронять программу и сохранить её работоспособность. Не говоря уже о других, более мелких исключениях. В таких случаях необходимо следить за целостностью объектов. Делать это в системе, построенной на исключениях в языке без поддержки finally - геморрой ;)

#325
14:42, 15 мар 2012

DevilDevil
> > vector.size = -1; // wtf ?
Ты уверен, что этого не будет?
Ты уверен, что ты, или твой коллега не ошибется в этом месте?

Ты считаешь, что можно забить?
Ты знаешь, что будет если этот код попытается работать?

#326
14:42, 15 мар 2012

Try
> К примеру мы пытались сделать счетную сортировку ( которой как-раз нужна дополнительная память ) и получили out_of_memory на середине - надо бы откатить
> some_data к исходному состоянию, но не получится сделать это просто.
не понятно к какому исходному состоянию ты собрался откатывать some_data ? ты же его нигде не сохранил. даже не понятно какие ты операции проводил над some_data, так что тут даже поговорить не о чем.
сферический конь в вакууме какой-то. давай опиши твою пракическую ситуацию, где тебе помог finally, (или не помог, на самом деле даже не понятно решил ты эту проблему или нет)

Ogra
> Речь о том, что иногда даже при исключении "нехватка памяти" можно не ронять
> программу и сохранить её работоспособность. Не говоря уже о других, более
> мелких исключениях. В таких случаях необходимо следить за целостностью
> объектов. Делать это в системе, построенной на исключениях в языке без
> поддержки finally - геморрой ;)
к сожалению я понимаю о чем ты говоришь. я видел очень много такого кода, в котором программист решает созданные самому же себе проблемы.
например мы добавим объект в список игровых объектов, потом загрузим в него данные из ресурсов, а если что-то пошло не так, в finally проверим, правильно ли он загрузился, если нет то удалим его.
какой логичный алгоритм я придумал =) лол.

#327
14:50, 15 мар 2012

Try
> DevilDevil
> > > vector.size = -1; // wtf ?
> Ты уверен, что этого не будет?
> Ты уверен, что ты, или твой коллега не ошибется в этом месте?
>
> Ты считаешь, что можно забить?
> Ты знаешь, что будет если этот код попытается работать?


Прекрасно если это будет
Возникнет Exception и покажет на место ошибки. Ошибка быстро исправится

#328
14:55, 15 мар 2012

С RAII в C++ есть одна проблемка. Что делать, если при освобождении ресурса может произойти нештатная ситуация? Классический пример - при закрытии буферизированного потока необходимо сделать flush. Что делать в ситуации, когда он по какой-то причине не получился (например, пользователь тупо флэшку вытащил)? Кидать исключение из деструктора - а если мы в раскрутке стэка в результате предидущего исключения?

#329
14:56, 15 мар 2012

yatagarasu
> например мы добавим объект в список игровых объектов, потом загрузим в него
> данные из ресурсов, а если что-то пошло не так, в finally проверим, правильно
> ли он загрузился, если нет то удалим его.
> какой логичный алгоритм я придумал =) лол.

Вот до слов "удалим его" все было правильно ;)  Это конечно лучше, чем "упадем", но все равно фигня какая-то.

Что-то представилось даже - идет игра с бесшовным миром, асинхронно подгружается новый объект, по мере подгрузки он показывается на экране. Вот отрисовался mesh, вот наложилась текстура, а вот сейчас ляжет bump... Бададыщ! Игра упала. Или объект пропал. Прелесть! ;) (Хотите более правдоподобный сюжет? Ок - загрузка юзер-пикчи в ММО. А сервер, который раздает статику упал).

Страницы: 121 22 23 2426 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.