Я думаю, что лучшим решением было бы использование макроса выделения и удаления вместо всеобъемлющего. Это действительно грязная, не очень полезная вещь
Когда я программирую на C, я обычно делаю что-то вроде следующего:
#define ALLOC_ARY(type, sz) (type*)calloc(sz, sizeof(type))
#define ALLOC_STR(sz) ALLOC_ARY(char, sz)
char *string = ALLOC_STR(128);
int *array = ALLOC_ARY(int, 20);
Но помнить о свободе в vanilla C - это только часть этого:
free(string); string = NULL;
free(array); array = NULL;
Редактировать: Для C ++ умные указатели, как и другие считают, - хороший путь.