обещанный пример из реальной жизни где работает С и не работает С++.
будет состоять из нескольких постов.
часть первая.
итак возьмем два блока кода. Однис с malloc, другой с обычным порошком - try/catch
первый блок я напишу сам, причем с ошибками, и не используя разных полезных техник (например alloca).
Второй код - аналог на try/catch я попрошу написать кого-то из присутствующих здесь объектников.
Итак. Инициализатор структуры foo.
Код:
typedef void* foo_t;
typedef struct
{
bar_t bar;
baz_t baz;
} foo_int_t;
foo_t foo_init(int z)
{
foo_int_t* rv=0;
if(!(rv=malloc(sizeof(foo_int_t)))
return 0;
{
char *p=malloc(14); // имитируем необходимость в динамической памяти,
// забыли проверить на 0
if(!(rv->bar=bar_init()))
goto leave; // забыли освободить память
bar_setmem(p); // реально если p требуется в инициализации, то должен быть там. но мы ведь пишем неправильно. :-)
free(p);
}
if(rv->baz=baz_init())
return rv;
free(rv->baz);
leave:
free(rv->bar);
free(rv);
}
А теперь ждем его функциональный аналог аналог на С++, причем написанный правильно (оказывается очень многие вещи на С++ можно писать неправильно!)
Социальные закладки