【发布时间】:2011-05-02 15:48:33
【问题描述】:
联合拥有一种或多种方法有什么问题吗?或者有什么需要注意的? (我可以看到构造函数/析构函数由于精神分裂症的原因而存在问题)
【问题讨论】:
-
除了你提到的析构函数和释放内存之外,我认为它们没有任何问题。
-
这就是为什么不能拥有具有非平凡构造函数、析构函数或赋值运算符的类/结构类型的联合成员的原因。
联合拥有一种或多种方法有什么问题吗?或者有什么需要注意的? (我可以看到构造函数/析构函数由于精神分裂症的原因而存在问题)
【问题讨论】:
来自 C++03 和 C++0x(草案 N3092)标准:
9.5 联合
联合可以有成员函数(包括 构造函数和析构函数),但不是 虚拟 (10.3) 函数。工会 不应有基类。工会 不得用作基类。
使用聚合初始值设定项语法 (U u = { 42 };) 或之后设置成员 (U u; u.i = 42;) 初始化联合不是“有问题的”。也没有使用构造函数 (U u( 42 );) 对其进行初始化。
唯一的“问题”是您不能对具有用户定义构造函数的联合使用聚合初始化器语法。
【讨论】:
你怎么可能实现这样的事情?这是一个指向联合的指针,希望您不要介意您不知道哪些变量可以安全使用,哪些不是。
无论如何,联合实际上是一种已死的语言特性——它们已经完全被基于库的方法所取代,例如 boost::variant 或 boost::any。有点类似于 void* 和功能宏 - 与其他选项相比,它们在 C++ 中很少有用。
【讨论】: