尝试使用字符串引用已删除的函数

时间:2017-06-09 10:09:15

标签: c++

我有工会:

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时,它可以正常工作。 字符串是否可以正常工作?

1 个答案:

答案 0 :(得分:0)

您需要再次阅读本书中有关工会的章节,因为they can't do this;如果析构函数或复制/移动构造函数/运算符不重要,它不能是联合成员。想想当你的工会超出范围时会发生什么。哪个析构函数被调用?

一个不错的选择是标记联合,一种更复杂但更健壮的类型,它使用placement-new来精确控制对象的生命周期。这允许使用复杂类型(例如std::string)作为成员。一个很好的实现是boost::variant