我正在创建一个结构,该结构在堆上具有一个 unordered_map 字段。当我使用 new 时,我可以毫无问题地添加它。但是使用 calloc 时,由于存储桶大小为 0,因此插入时出错。在调用 Reserve 后它工作正常。
那么,在结构上调用 calloc 时,unordered_map 构造函数不会运行吗?我很困惑为什么如果它在一个新的结构中,它似乎有一个非零的桶大小。除了打电话给保护区外,还有更好的方法吗?(在这种情况下我不能使用 delete,所以我需要坚持 calloc 调用)
我正在创建一个结构,该结构在堆上具有一个 unordered_map 字段。当我使用 new 时,我可以毫无问题地添加它。但是使用 calloc 时,由于存储桶大小为 0,因此插入时出错。在调用 Reserve 后它工作正常。
那么,在结构上调用 calloc 时,unordered_map 构造函数不会运行吗?我很困惑为什么如果它在一个新的结构中,它似乎有一个非零的桶大小。除了打电话给保护区外,还有更好的方法吗?(在这种情况下我不能使用 delete,所以我需要坚持 calloc 调用)
C 内存分配函数通常不调用构造函数。请参阅malloc 与 new。第一个答案很好地总结了它:不要malloc
在 C++ 中使用。
calloc
不做任何事情来初始化你的对象作为对象。它基本上是给你一个指向一些用零填充的内存的指针。所以任何需要初始化的内部字段,比如你的地图,都不会得到它。您不应该将 calloc 与对象一起使用。(实际上,您可能根本不需要它。)