jam*_*tha 0 c++ malloc memory-management calloc
我正在创建一个结构,其中的字段是堆上的unordered_map.当我使用new时,我可以毫无问题地添加它.但是使用calloc,我得到一个插入错误,因为桶大小为0.我调用reserve后工作正常.
那么,当在结构上调用calloc时,unordered_map构造函数不会运行吗?我很困惑为什么如果它在一个新版本的结构中,它似乎具有非零桶大小.除了召唤预备队之外,还有更好的方法吗?(在这种情况下我不能使用删除,所以我需要坚持使用calloc调用)
你是对的,malloc()等等不运行构造函数,而是new.
您不能依赖于呼叫reserve()后calloc()似乎可以解决问题的事实.它没有.您的代码的行为仍然是未定义的,并且它可能随时爆炸,并以任何方式令人高兴.
解决问题的一种方法是使用placementnew来调用unordered_map构造函数.
或者,你可以把现场变成一个指针,calloc()对struct,然后用new分配和构建unordered_map.如果你这样做,你将不得不手动delete它.