C++ 带指针的并集

C++ 带指针的并集,c++,unions,C++,Unions,我有一个union,有两个指向不同数据类型的指针: union{ UCHAR *_rawData; RGB *_RGBData; }; typedef struct RGB { UCHAR red; UCHAR green; UCHAR blue; }RGB; 稍后在代码中 _rawData = new UHCAR[126]; _RGBData = new _RGBData[42]; //3 times lower than rawData 所以我的问

我有一个union,有两个指向不同数据类型的指针:

union{
    UCHAR *_rawData;
    RGB *_RGBData;
};
typedef struct RGB
{
    UCHAR red;
    UCHAR green;
    UCHAR blue;
}RGB;
稍后在代码中

_rawData = new UHCAR[126];
_RGBData = new _RGBData[42]; //3 times lower than rawData

所以我的问题是。。这样组成工会安全吗?理论上,这两个变量都使用126字节,因此应该可以,但我不确定,因此我在这里询问了

联合本身是有效的,但在任何时候只有一个联合成员可以处于活动状态:

  • 因此,在代码后面进行两次初始化是完全错误的:第一个指针将丢失
  • 您必须找到一种方法来确定哪个成员处于活动状态
如果我通过第一个指针创建它并通过第二个指针删除它,是否会出错?因为只有一个成员可以激活,所以您只能删除一次。如果使用/删除错误的成员,则结果未定义。在您的例子中,由于您有指向POD数据结构的指针,并且没有定义特定的析构函数,所以它可以工作,但非常不安全。在实践中,除了“歧视性”联合之外,很少看到其他任何东西。这基本上意味着您有一种方法来确定联合体中哪种类型是“活动的”。您必须小心始终保持不变。最典型的实现是使用枚举。