如何在c ++中动态创建联合实例?

时间:2009-11-24 21:37:26

标签: c++ instance unions

我需要将union的几个实例作为类变量,所以我如何在堆中创建一个union实例?谢谢

6 个答案:

答案 0 :(得分:8)

与创建任何其他对象相同:

union MyUnion
{
   unsigned char charValue[5];
   unsigned int  intValue;
};


MyUnion *myUnion = new MyUnion;

你们的工会现在已经堆积如山了。请注意,union是其最大数据成员的大小。

答案 1 :(得分:2)

我的C ++有点生疏,但是:

   my_union_type *my_union = new my_union_type;
   ...
   delete my_union;

答案 2 :(得分:0)

使用new运算符。

答案 3 :(得分:0)

与struct :)相同您可以使用malloc()并以C方式执行,或以{+ 1}}使用C ++方式。秘密是结构,工会和阶级是相关的; struct只是一个没有方法的类(通常)。如果您愿意,可以在以下评论中进一步澄清。

答案 4 :(得分:0)

我不确定你想把它放在哪里。 union是用户定义的数据或类类型,在任何给定时间,它只包含其成员列表中的一个对象。所以从这开始,如果你有一个像这样定义的联合:

union DataType
{
    char ch;
    integer i;
    float f;
    double d;
};

然后,您可以使用DataType作为类型来定义类中的成员或作为类型来定义堆栈上的变量,就像您定义的常规类型,结构或类一样。

答案 5 :(得分:0)

使用new运算符:

#include <iostream>

union u {
  int a;
  char b;
  float c;
};

class c {
public:
  c() { u1 = new u; u2 = new u; u3 = new u; }
  ~c() { delete u1; delete u2; delete u3; }
  u *u1;
  u *u2;
  u *u3;
};

int main()
{
  c *p = new c;

  p->u1->a = 1;
  p->u2->b = '0' + 2;
  p->u3->c = 3.3;

  std::cout << p->u1->a << '\n'
            << p->u2->b << '\n'
            << p->u3->c << std::endl;

  delete c;

  return 0;
}