Использовать или не использовать — зависит от типа ARM. Я по жизни не люблю использовать исключения, по этому не стал бы их использовать в данном случае.
Здравствуйте, Аноним, Вы писали:
А>Тема использовать или не использовать много раз обсуждалась, А>но теперь столкнулся с ней напрямую, и не знаю что делать.
А>Есть ARM и 64 Мб, надо выбрать использовать или не использовать А>исключения, до написания основного кода,
А>какие бы вы выбрали тесты для этого будь у вас железка и кроскомпилятор А>gcc 4.x для этого?
Я использую исключения. Как раз на ARM е c 64 Мб и gcc 4.x.
UN>Использовать или не использовать — зависит от типа ARM. Я по жизни не люблю использовать исключения, по этому не стал бы их использовать в данном >случае.
нмв неиспользование исключений приводит к коду в стиле "Си с классами". фактически ты лишаешься RAII
Здравствуйте, Awaken, Вы писали:
UN>>Использовать или не использовать — зависит от типа ARM. Я по жизни не люблю использовать исключения, по этому не стал бы их использовать в данном >случае.
A>нмв неиспользование исключений приводит к коду в стиле "Си с классами". фактически ты лишаешься RAII
А так же конструкторов, операторов и функций с удобной сигнатурой
Использую исключения. Платформа ARM. Win Mobile 5, 6. В том числе в достаточно критических местах. Проблемм не замечал, хотя и тестов скорости, сравнительных, с ситуацией "без исключений", не проводил. Компилятор родной VS 2005 SP1
Здравствуйте, Awaken, Вы писали:
A>нмв неиспользование исключений приводит к коду в стиле "Си с классами". фактически ты лишаешься RAII
А зачем?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Аноним, Вы писали:
А>Тема использовать или не использовать много раз обсуждалась, А>но теперь столкнулся с ней напрямую, и не знаю что делать.
А>Есть ARM и 64 Мб, надо выбрать использовать или не использовать А>исключения, до написания основного кода,
А>какие бы вы выбрали тесты для этого будь у вас железка и кроскомпилятор А>gcc 4.x для этого?
Здравствуйте, Awaken, Вы писали:
Ш>>Я использую исключения. Как раз на ARM е c 64 Мб и gcc 4.x. A>а что за платформа и приложение?
Это не приложение. Я делал экспериментальное RT ядро для ixp465. Компилятор -- gcc-4.1.1 с подправленной RTL (в частности, для того чтобы можно было использовать C++ для обработки прерываний).
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, Awaken, Вы писали:
A>>нмв неиспользование исключений приводит к коду в стиле "Си с классами". фактически ты лишаешься RAII
E>А зачем?
В смысле, зачем? Ты считаешь, что RAII — ненужная, бесполезная вещь? Объясни.
Здравствуйте, alexeiz, Вы писали:
E>>А зачем? A>В смысле, зачем? Ты считаешь, что RAII — ненужная, бесполезная вещь? Объясни.
Зачем лишаться RAII если не использовать исключения?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, alexeiz, Вы писали:
E>>>А зачем? A>>В смысле, зачем? Ты считаешь, что RAII — ненужная, бесполезная вещь? Объясни. E>Зачем лишаться RAII если не использовать исключения?
Захват ресурсов происходит в конструкторе (= resource aquisition is initialization). Без исключений ты не можешь проделать это в конструкторе по очевидным причинам.
> E>>>А зачем? > A>>В смысле, зачем? Ты считаешь, что RAII — ненужная, бесполезная вещь? Объясни. > E>Зачем лишаться RAII если не использовать исключения? > > Захват ресурсов происходит в конструкторе (= resource aquisition is initialization). Без исключений ты не можешь проделать это в конструкторе по очевидным причинам.
Да ну. Проверок просто вставлять придется кучу, и все.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Sergey, Вы писали:
>> E>>>А зачем? >> A>>В смысле, зачем? Ты считаешь, что RAII — ненужная, бесполезная вещь? Объясни. >> E>Зачем лишаться RAII если не использовать исключения? >> >> Захват ресурсов происходит в конструкторе (= resource aquisition is initialization). Без исключений ты не можешь проделать это в конструкторе по очевидным причинам.
S>Да ну. Проверок просто вставлять придется кучу, и все.
Здравствуйте, alexeiz, Вы писали:
A>Захват ресурсов происходит в конструкторе (= resource aquisition is initialization). Без исключений ты не можешь проделать это в конструкторе по очевидным причинам.
А что помешает?
Ну будет у CFile метод bool IsOpend() const, и тебе после открытя файла прийдётся проверять получилось ли.
Ну так и без RAII пришлось бы. А вот зарыть файл в деструкторе тебе ничего не помешает...
Хуже с операторами. Прийдётся какие-то невалидные состояния объектов заводить. Ну либо подход, который нравится мне использовать
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, alexeiz, Вы писали:
A>>Захват ресурсов происходит в конструкторе (= resource aquisition is initialization). Без исключений ты не можешь проделать это в конструкторе по очевидным причинам.
E>А что помешает? E>Ну будет у CFile метод bool IsOpend() const, и тебе после открытя файла прийдётся проверять получилось ли.
Ну, и понятно, будет так, что объект может быть сконструирован, но его состояние не определено. Одна из основных целей RAII выброшена в трубу. Ты можешь до сих пор называть это RAII, я уже не могу.
E>Ну так и без RAII пришлось бы. А вот зарыть файл в деструкторе тебе ничего не помешает...
E>Хуже с операторами. Прийдётся какие-то невалидные состояния объектов заводить. Ну либо подход, который нравится мне использовать
>> Захват ресурсов происходит в конструкторе (= resource aquisition is initialization). Без исключений ты не можешь проделать это в >конструкторе по очевидным причинам. S>Да ну. Проверок просто вставлять придется кучу, и все.
можно конечно извернуться но неудобств гораздо больше
вот например такой случай: объект типа "композит", содержащий внутренние объекты.
class Composite
{
A a;
B b:
public:
Composite(x, y):a(x),b(y)
};
просто инициализируем и не паримся. если объект А проинициализирован, а B кинул исключение, А будет уничтожен корректно
без RAII:
class Composite
{
A* a;
B* b:
public:
Composite() {} // нельзя проинициализировать A и B здесьbool Initialize(x, y)
{
a = new A(x);
if(a == NULL)
return false;
b = new B(y);
if(b == NULL)
{
delete b;
return false
}
// если таких как a и b с десяток, код здесь будет полный ахтунг
// в худшем варианте придется еще делать
// a = new A(x)
// rt = a->Initialize(params);
// if(rt != ERROR) ....
}
};
можно конечно намутить с временным сохранением успешно созданых объектов
class Composite
{
A* a;
B* b;
// ...
std::list<boost::any> created;
public:
Composite() {} // нельзя проинициализировать A и B здесьbool Initialize(x, y)
{
a = new A();
ret = a->Initialize(x);
if(ret == success)
created.push_back( a );
else
goto error_exit;
b = new B();
ret = b->Initialize(y);
if(ret == success)
created.push_back(b);
else
goto error_exit;
// и так много раз
ok: return true;
error_exit:
// удаляем все что в createdreturn false;
}
};