代码之家  ›  专栏  ›  技术社区  ›  OlimilOops

联轴节

c++
  •  0
  • OlimilOops  · 技术社区  · 16 年前

    union uu {  
        int intval;  
        wstring strval;  
    
        uu(){ memset(this, 0, sizeof(this)); }  
    }
    

    它说:“union的成员strval有复制构造函数” 我认为strval应该有一个*或&; 你如何定义它?

    提前谢谢
    哎呀

    2 回复  |  直到 16 年前
        1
  •  9
  •   anon anon    16 年前

    你不能这么做。联合的成员必须是POD类型-即,它们不能有构造函数或析构函数。即使可以,对memset的调用也会破坏整个字符串,导致未定义的行为。当然可以使用指针:

    union uu {  
        int intval;  
        wstring * strval;  
    
        uu(){ memset(this, 0, sizeof(uu)); }  
    };
    
        2
  •  5
  •   Johannes Schaub - litb    16 年前

    boost.variant 是你想用的

    boost::variant<int, wstring> v("hello");
    

    如果使用指针作为联合的成员,则必须分配并释放指针指向自己的字符串,最好使用 new delete .

    boost::variant 解决了这个问题:它在variant对象本身中分配所有成员(因此没有用于存储成员的动态分配),并且您不必执行任何操作 新的 给自己打个电话。