私は働いていて、組合の利用を考えていました。設計が構造体/クラスを実際に要求したため、私はそれに反対することにしましたが、最終的に次の仮説的な質問につながります。
この不自然な例のような共用体があるとします。
typedef union {
char* array_c;
float* array_f;
int* array_i;
} my_array;
. . . 次に、配列の 1 つを割り当てて、別の場所から削除してみます。
my_array arr;
arr.array_f = (float*)(malloc(10*sizeof(float)));
free(arr.array_i);
malloc の実装方法により、技術的には定義されていませんが、これは機能すると思います。また、int と float とは異なり、配列が同じサイズになる可能性は低いですが、array_c を割り当てるときにも機能すると思います。
このテストは、類似した new と delete で繰り返すことができます。これらもうまくいくと思います。
言語仕様はこれを行うことで私を嫌うだろうと推測していますが、うまくいくと思います. 「オブジェクトではなく配列であっても、void* にキャストされた new-ed ポインターを削除しないでください」ビジネスを思い出させます。
質問: 仕様はこれを行うことについて何と言っていますか? 簡単に確認しましたが、特にこのケースに対処するものは見つかりませんでした。とにかく、これは機能的な観点から見れば、どれほど賢明ではないでしょうか(私は、これが明確さの観点からひどいことだと認識しています)。
これは純粋に衒学的な目的のための好奇心の問題です。