В ответ в другом месте я нашел следующий фрагмент:
В целом, на C лучше вызывающий абонент выделяет память, а не callee - поэтому почему strcpy является "более приятным", функции, на мой взгляд, чем strdup.
Я вижу, как это действительный шаблон, но почему его можно считать более приятным? Имеются ли преимущества для следования этой схеме? Или нет?
Пример
Недавно я написал довольно много кода, который выглядит примерно так:
struct foo *a = foo_create();
// do something with a
foo_destroy(a);
Если foo
- это нечто большее, чем плоская структура, то я решил, что смогу выполнить всю свою инициализацию за один шаг. Кроме того, предположим, что структура должна находиться в куче. Почему лучше было бы сделать что-то вроде:
struct foo *a = malloc(sizeof(foo));
foo_init(a);
// do something with a
foo_destroy(a)