Я работал и рассматривал возможность использования профсоюза. Я отказался от этого, потому что дизайн действительно требовал структуры/класса, но в конечном итоге это привело к следующему гипотетическому вопросу:
Предположим, у вас есть союз, подобный этому надуманному примеру:
typedef union {
char* array_c;
float* array_f;
int* array_i;
} my_array;
. . . а затем вы выделяете один из массивов и пытаетесь удалить его откуда-то еще:
my_array arr;
arr.array_f = (float*)(malloc(10*sizeof(float)));
free(arr.array_i);
Я предполагаю, что это сработает, хотя технически это не определено из-за того, как реализована функция malloc. Я также предполагаю, что это будет работать при распределении массива_c, хотя, в отличие от int и float, массивы вряд ли будут одинакового размера.
Тест может быть повторен с новыми и удаленными, которые аналогичны. Я предполагаю, что они также будут работать.
Я предполагаю, что спецификация языка ненавидит меня за это, но я ожидаю, что это сработает. Это напоминает мне о бизнесе «не удалять новый указатель, приведенный к void*, даже если это массив, а не объект».
Итак, вопросы: что говорит спецификация об этом? Я проверил кратко, но не смог найти ничего, что касалось бы именно этого случая. В любом случае, насколько это опрометчиво — с функциональной точки зрения (я понимаю, что это ужасно с точки зрения ясности).
Это чисто любопытный вопрос для педантичных целей.