C++ calloc(),malloc()与新建一个内部有无序映射的结构
我正在创建一个结构,其中有一个字段是堆上的无序_映射。当我使用新的,我可以添加到它没有问题。但是使用calloc时,由于bucket大小为0,因此插入时会出错。在我打电话给预备队后,效果很好C++ calloc(),malloc()与新建一个内部有无序映射的结构,c++,memory-management,malloc,calloc,C++,Memory Management,Malloc,Calloc,我正在创建一个结构,其中有一个字段是堆上的无序_映射。当我使用新的,我可以添加到它没有问题。但是使用calloc时,由于bucket大小为0,因此插入时会出错。在我打电话给预备队后,效果很好 那么,在结构上调用calloc时,无序的_映射构造函数是否不运行?我很困惑,为什么如果它是在一个新编辑的结构中,它似乎有一个非零的桶大小。除了给保护区打电话,还有更好的办法吗?(在这种情况下,我不能使用delete,所以我需要继续使用calloc调用)您是正确的,malloc()等不运行构造函数,而new运
那么,在结构上调用calloc时,无序的_映射构造函数是否不运行?我很困惑,为什么如果它是在一个新编辑的结构中,它似乎有一个非零的桶大小。除了给保护区打电话,还有更好的办法吗?(在这种情况下,我不能使用delete,所以我需要继续使用calloc调用)您是正确的,
malloc()
等不运行构造函数,而new
运行构造函数
您不能依赖在calloc()
之后调用reserve()
来解决问题。没有。代码的行为仍然是静态的,它可以在任何时候以任何它喜欢的方式爆炸
解决此问题的一种方法是使用调用无序映射的构造函数
或者,您可以将该字段转换为指针,calloc()
struct
,然后使用new
分配和构造无序映射。如果您这样做,您将不得不手动删除它。您是正确的,malloc()
等不运行构造函数,而new
运行构造函数
您不能依赖在calloc()
之后调用reserve()
来解决问题。没有。代码的行为仍然是静态的,它可以在任何时候以任何它喜欢的方式爆炸
解决此问题的一种方法是使用调用无序映射的构造函数
或者,您可以将该字段转换为指针,calloc()
struct
,然后使用new
分配和构造无序映射。如果执行此操作,则必须手动删除它。C内存分配函数通常不会调用构造函数。看见第一个答案很好地总结了:在C++中不要使用<代码> Mulalc < /Cord>。 < P>内存分配函数通常不调用构造函数。看见第一个答案很好地总结了:在C++中不要使用<代码> Mulalc < /Cord>。<> >代码> CaloC不初始化对象QA对象。它基本上是给你一个指针,指向一些满是零的内存。因此,任何需要初始化的内部字段(如地图)都无法获取您不应该将calloc与对象结合使用。(实际上,您可能根本不需要它。)calloc
不会将对象初始化为对象。它基本上是给你一个指针,指向一些满是零的内存。因此,任何需要初始化的内部字段(如地图)都无法获取您不应该将calloc与对象结合使用。(实际上,您可能根本不需要它。)为什么要强制使用calloc?这是遗留代码。我只是给它添加了一个新字段,它恰好是一个无序的地图。这很公平。我想这意味着你也不能使用placement new?为什么你必须使用calloc?这是遗留代码。我只是给它添加了一个新字段,它恰好是一个无序的地图。这很公平。我想这意味着你也不能使用新的布局?通常?他们永远不会调用构造函数。(嗯,char
可能是一个例外)鉴于我不可能知道每个实现的行为,我通常坚持使用。通常?他们永远不会调用构造函数。(嗯,char
可能是一个例外)鉴于我不可能知道每个实现的行为,我通常坚持使用。