gpt4 book ai didi

c++ - 为什么 std::map::emplace 用法会泄漏内存?

转载 作者:太空狗 更新时间:2023-10-29 19:42:59 26 4
gpt4 key购买 nike

在最近的 article我读到以下对 std::map::emplace 的使用可能会泄漏内存,但我不明白为什么:

// might leak if allocation fails due to insufficient memory for an object A
std::map<int, std::unique_ptr<A>> m;
m.emplace(1, std::make_unique<A>("Ann",63));

谁能解释一下?

最佳答案

如果 map 分配新节点由于内存不足而失败,您发布的代码片段不会导致内存泄漏。您在调用 map::emplace 之前构造了一个 unique_ptr,因此如果该函数抛出异常,unique_ptr删除 A 并避免泄漏。

作者大概的意思是下面的代码在类似情况下会泄漏内存

std::map<int, std::unique_ptr<A>> m;
m.emplace(1, new A("Ann",63));

在这种情况下,您将原始指针传递给 emplace 并依赖函数将指针的所有权转移给 unique_ptr。如果函数在分配新节点期间抛出异常,则不会构造任何 unique_ptr 来获取指针的所有权,并且内存将泄漏。

关于c++ - 为什么 std::map::emplace 用法会泄漏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53807794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com