我有工会:
union dataUnion
{
struct data1
{
string textString;
}dataStruct1;
struct data2
{
unsigned char dataChar;
}dataStruct2;
};
现在我创建了类:
class testC
{
public:
union dataUnion data;
};
testC classDataC;
我收到错误:尝试引用已删除的功能 当我将字符串textString更改为unsigned char textString时,它可以正常工作。 字符串是否可以正常工作?
答案 0 :(得分:0)
您需要再次阅读本书中有关工会的章节,因为they can't do this;如果析构函数或复制/移动构造函数/运算符不重要,它不能是联合成员。想想当你的工会超出范围时会发生什么。哪个析构函数被调用?
一个不错的选择是标记联合,一种更复杂但更健壮的类型,它使用placement-new来精确控制对象的生命周期。这允许使用复杂类型(例如std::string
)作为成员。一个很好的实现是boost::variant
。