我如何为尚未初始化的工会成员分配内存

hmcll

我有两个成员的联合。

union myUnion {
    std::wstring mem1;
    int mem2;
    myUnion(std::wstring in){
        this->mem1 = in;
    }
    myUnion(int in){
        this->mem2 = in;
    }
    myUnion(const myUnion& in){
        if(this->mem2){
            this->mem2 = in.mem2;
        }else{
            this->mem1 = in.mem1;
        }
    }
};
//and then I make a vector out of the union:
std::vector<myUnion> unions;
//but when I try to push_back:
unions.push_back(L"A");

很快就会出现运行时错误:0xC0000005:访问冲突写入位置0xCCCCCCCC。当我尝试调试该程序时,我意识到mem1尚未分配内存。我真的不知道为什么会这样,我想知道我该如何解决。

克里斯·贝克

在C ++中,union它不是非常自然的数据类型,因为它实际上并不完全符合整个C ++构造函数和析构函数的思想。在C ++中创建联合时,它不会为其任何可能的类型调用构造函数,因为它们都将在彼此的基础上进行编写。

所以这个构造函数

myUnion(std::wstring in){
    this->mem1 = in;
}

由于this->mem1未启动作为字符串的生存期,因此将崩溃您将必须使用类似的方法,std::string使用该地址的new位置致电ctor。以后,如果更改数据类型,则必须确保this->mem1在开始写入并集的其他字段之前记得也调用dtor ,否则将导致内存泄漏或损坏。

到目前为止,使用C ++进行操作的最简单方法是使用类似变量的类型,例如boost::variant,它将为您处理所有样板和所有细节。(如果只使用没有ctor或dtor的琐碎类型,则联盟可以。)

typedef boost::variant<std::wstring, int> MyUnion;

std::vector<MyUnion> unions;

unions.push_back(L"A");

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

初始化者,工会的特定成员

来自分类Dev

我可以为一个工会成员分配一个值,并从另一个工会成员读取相同的值吗?

来自分类Dev

Java是否为类的字段分配内存,即使它们尚未初始化?

来自分类Dev

初始化后如何为UITextField分配委托?

来自分类Dev

初始化后如何为UITextField分配委托?

来自分类Dev

您可以将一个工会成员的价值分配给另一工会成员吗?

来自分类Dev

分配+初始化内存使用机制

来自分类Dev

如何为类的内置类型成员变量获取/实现“未初始化的使用警告”消息?

来自分类Dev

如何为类的内置类型成员变量获取/实现“未初始化的使用警告”消息?

来自分类Dev

即使我确定变量“可能尚未初始化”

来自分类Dev

我不了解MVVM上的“实例尚未初始化”

来自分类Dev

即使我确定变量“可能尚未初始化”

来自分类Dev

集合尚未初始化

来自分类Dev

libgdx尚未初始化

来自分类Dev

如何初始化实例成员?

来自分类Dev

如何多态初始化`static`成员

来自分类Dev

如何为 SetMasterVolume 初始化 HRESULT?

来自分类Dev

成员初始化

来自分类Dev

如何在结构数组中初始化和动态分配int指针成员?

来自分类Dev

初始化C结构与分配成员

来自分类Dev

如何为我的char指针分配内存?

来自分类Dev

如何为我的char指针分配内存?

来自分类Dev

变量可能尚未初始化...如何增加范围?

来自分类Dev

如何修复“lateinit 属性 YYY 尚未初始化”

来自分类Dev

重新分配期间快速内存初始化

来自分类Dev

Java中初始化变量的内存分配

来自分类Dev

用动态分配的内存初始化结构

来自分类Dev

虽然我已经初始化了,但 lateinit 属性 Songurl 尚未初始化

来自分类Dev

区分工会成员的方法

Related 相关文章

  1. 1

    初始化者,工会的特定成员

  2. 2

    我可以为一个工会成员分配一个值,并从另一个工会成员读取相同的值吗?

  3. 3

    Java是否为类的字段分配内存,即使它们尚未初始化?

  4. 4

    初始化后如何为UITextField分配委托?

  5. 5

    初始化后如何为UITextField分配委托?

  6. 6

    您可以将一个工会成员的价值分配给另一工会成员吗?

  7. 7

    分配+初始化内存使用机制

  8. 8

    如何为类的内置类型成员变量获取/实现“未初始化的使用警告”消息?

  9. 9

    如何为类的内置类型成员变量获取/实现“未初始化的使用警告”消息?

  10. 10

    即使我确定变量“可能尚未初始化”

  11. 11

    我不了解MVVM上的“实例尚未初始化”

  12. 12

    即使我确定变量“可能尚未初始化”

  13. 13

    集合尚未初始化

  14. 14

    libgdx尚未初始化

  15. 15

    如何初始化实例成员?

  16. 16

    如何多态初始化`static`成员

  17. 17

    如何为 SetMasterVolume 初始化 HRESULT?

  18. 18

    成员初始化

  19. 19

    如何在结构数组中初始化和动态分配int指针成员?

  20. 20

    初始化C结构与分配成员

  21. 21

    如何为我的char指针分配内存?

  22. 22

    如何为我的char指针分配内存?

  23. 23

    变量可能尚未初始化...如何增加范围?

  24. 24

    如何修复“lateinit 属性 YYY 尚未初始化”

  25. 25

    重新分配期间快速内存初始化

  26. 26

    Java中初始化变量的内存分配

  27. 27

    用动态分配的内存初始化结构

  28. 28

    虽然我已经初始化了,但 lateinit 属性 Songurl 尚未初始化

  29. 29

    区分工会成员的方法

热门标签

归档