首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >calloc()、malloc()与创建内部有unordered_map的结构的对比

calloc()、malloc()与创建内部有unordered_map的结构的对比
EN

Stack Overflow用户
提问于 2013-04-11 15:45:03
回答 3查看 1.4K关注 0票数 0

我正在创建一个结构,它的一个字段是堆上的一个unordered_map。当我使用new时,我可以毫无问题地添加它。但是使用calloc时,因为存储桶大小为0,所以插入时出错。在我调用保留后,它工作正常。

那么,当在结构上调用calloc时,unordered_map构造函数不会运行吗?我搞不懂为什么如果它在一个新版本的结构中,它似乎有一个非零的存储桶大小。除了打电话给预备队之外,还有更好的方法吗?(在这种情况下我不能使用delete,所以我需要坚持使用calloc调用)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-11 15:47:07

你是对的,malloc()等人不运行构造函数,而new运行构造函数。

您不能相信在calloc()之后调用reserve()似乎就能解决这个问题。你的代码的行为仍然是undefined的,它可能在任何时刻以任何它喜欢的方式爆炸。

解决这个问题的一种方法是使用placement new来调用unordered_map的构造函数。

或者,您可以将字段转换为指针,对struct执行calloc()操作,然后使用new来分配和构造unordered_map。如果你这样做,你将不得不手动delete它。

票数 5
EN

Stack Overflow用户

发布于 2013-04-11 15:47:40

内存分配函数通常不会调用构造函数。参见malloc vs new。第一个答案很好地总结了这个问题:不要在C++中使用malloc

票数 1
EN

Stack Overflow用户

发布于 2013-04-11 15:47:53

calloc不会将您的对象初始化为对象。它基本上是给你一个指针,指向一些充满零的内存。因此,任何需要初始化的内部字段,比如您的map,都不会得到它。你不应该和objects一起使用(实际上,你可能根本不需要它)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15943278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档