Calloc (), malloc() vs新建一个内部有unordered_map的结构体
calloc(), malloc() vs new-ing a struct that has an unordered_map inside
我正在创建一个结构体,该结构体的字段是堆上的unordered_map。当我使用new时,我可以毫无问题地添加。但是使用callloc时,插入时会出错,因为桶的大小是0。我打预备队电话就行了。
那么,当在结构体上调用calloc时,unordered_map构造函数不运行吗?我很困惑为什么如果它是在一个结构体,是新的,它似乎有一个非零桶的大小。除了打电话给保护区,还有更好的办法吗?(在这种情况下我不能使用delete,所以我需要坚持使用callloc调用)
你是对的,malloc()
等不运行构造函数,而new
运行。
你不能依赖这样一个事实,即在calloc()
之后调用reserve()
似乎可以解决问题。它不是。你的代码的行为仍然是未定义的,它可以在任何时候以任何方式爆炸。
new
来调用unordered_map
的构造函数。
或者,您可以将该字段转换为指针,calloc()
和struct
,然后使用new
来分配和构造unordered_map
。如果你这样做,你必须手动delete
C内存分配函数通常不调用构造函数。参见malloc vs new。第一个答案很好地总结了这一点:不要在c++中使用 malloc
。
calloc
不会将对象初始化为对象。它基本上是给你一个指针指向一些满是0的内存。任何需要初始化的内部字段,比如map,都不会得到它。你不应该将calloc与对象结合使用。(实际上,您可能根本不需要它)
相关文章:
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 包含 std::list 的结构体的 C++ 初始化
- 结构体和类的不同大小(),彼此具有相同的字段类型
- 如何使用结构体的向量数组?
- 如何使用结构体在C++中更改这些代码?
- 无法在 Mosquitto MQTT Broker 插件上访问结构体 mosquitto 的元素
- 我应该如何在C++中使用结构体解决输入失败的问题?
- Qsort() 比较结构体整数的总和
- 如何使用迭代器指向结构体c++的向量
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- 如何获取结构体成员的地址
- 创建结构体向量,表达式:向量下标超出范围
- boost::任何带有结构体和无符号整数
- 如何在构造函数中初始化结构体的动态数组?
- 只写结构体的某些字段
- C++ push_back() 一个结构体到一个向量中
- C++14 结构体上的统一初始化
- 访问不同类的私有结构体成员