我正在工作并且正在考虑使用工会。我决定反对它,因为设计确实需要一个结构/类,但它最终导致了以下假设性问题:
假设你有一个像这个人为的例子这样的联合:
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 的实现方式。我还假设它在分配 array_c 时会起作用,尽管与 int 与 float 不同,数组的大小不太可能相同。
可以使用类似的 new 和 delete 重复测试。我猜这些也行得通。
我猜语言规范会讨厌我这样做,但我希望它会起作用。它让我想起了“即使它是数组而不是对象,也不要删除转换为 void* 的新指针”业务。
所以问题是:规范对这样做有什么看法?我简单地检查了一下,但找不到任何特别解决这种情况的东西。无论如何,这是多么不明智——从功能的角度来看(我意识到从清晰的角度来看这很糟糕)。
这纯粹是出于迂腐目的的好奇问题。