Здравствуйте, Юрий Жмеренецкий, Вы писали:
ЮЖ>PS: Есть способ "гарантированного" выделения памяти (с очевидными недостатками): т.н. non-null malloc (nn_malloc) — функция не возвращает управление до тех пор, пока не сможет выделить блок необходимого размера.
Ну-ну...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, Юрий Жмеренецкий, Вы писали:
ЮЖ>>PS: Есть способ "гарантированного" выделения памяти ([b]с очевидными недостатками/[b])...
E>Ну-ну...
Здравствуйте, BossOJ, Вы писали:
BOJ>#define _DELETE_(p) { if(p) { delete (p);(p)=NULL; };};
BOJ>#define _DELETE_ARRAY_(p) { if(p) { delete [] (p);(p)=NULL; };};
Если уж юзать блоки в макросах, то так:
do{
...
}while(0)
или что бы ворнинги не надоедали:
do{
...
}while(0,0)
Здравствуйте, Аноним, Вы писали:
А>Если уж юзать блоки в макросах, то так:
А>А>do{
А> ...
А>}while(0)
А>или что бы ворнинги не надоедали:А>do{
А> ...
А>}while(0,0)
Можете объяснить почему?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Если уж юзать блоки в макросах, то так:
А>>А>>do{
А>> ...
А>>}while(0)
А>>или что бы ворнинги не надоедали:А>>do{
А>> ...
А>>}while(0,0)
А>Можете объяснить почему?
Вызов макроса становится больше похож на вызов функции.
Например в таких случаях:
inline void MYFUNC(int x){}
#define MYMACRO1(x) {}
#define MYMACRO2(x) {};
#define MYMACRO3(x) do{}while(0)
...........
...........
...........
if(x)
MYFUNC(1);
else
MYFUNC(2);
//============
if(x)
MYMACRO1(1) //обязательно без ";"
else
MYMACRO1(2)
//============
if(x){
MYMACRO2(1) //обязательно с "{}"
}else{
MYMACRO2(2)
}
//============
if(x)
MYMACRO3(1); //так же как и для функций
else
MYMACRO3(2);
MYFUNC(0);
MYMACRO1(0)
MYMACRO2(0)
MYMACRO3(0); //обязательно с ";" (как и для функций)
Впоследствии это позволит безболезненно заменить макрос функцией
+ код получается более единообразным.
Здравствуйте, Odi$$ey, Вы писали:
OE>Здравствуйте, <Аноним>, Вы писали:
А>>Подскажите пожалуйста как оптимизировать код чтобы меньше плодить кода и случайно не опечататься ...
OE>Умные указатели в C++Автор(ы): Igor Semenov
Дата: 17.07.2008
В этой статье приводится обзор инструментов, позволяющих избежать части проблем, связанных с использованием динамической памяти в C++. Описанные ниже инструменты и методики не являются панацеей от проблем управления памятью, они всего лишь способны облегчить жизнь программисту при условии правильного их использования. Эти инструменты носят общее название «умные указатели» («smart pointers»), что подразумевает их семантическое сходство с обыкновенными указателями C++.
очень харошая статья, там первый идет описание auto_ptr, человек ее прочитает и сделает
вместо
mas1 = new int[100]
вот так
auto_ptr<int*> mas1(new int[100]);
а что, в статье не написано, почему так нельзя