gpt4 book ai didi

c++ - Push_back 和异常安全

转载 作者:行者123 更新时间:2023-12-01 22:05:35 35 4
gpt4 key购买 nike

我知道push_back可以抛出bad_alloc异常,并且如果没有try catch block ,则调用析构函数是不正确的。如果有任何push_back抛出并且它不在try catch block 内,我会出现内存泄漏吗?这意味着如果我不想发生泄漏,我必须将每个 Push_back 包装在 try catch 中?对于 vector 来说,这种行为是否太罕见且昂贵,无法捕获异常,释放已分配的内存并重新抛出异常?

最佳答案

if there is no try catch block it is not true that the destructors are called

这是 implementation-defined在这种情况下是否会发生堆栈展开(调用析构函数)。

if any push_back throws and it's not inside a try catch block I'll have a memory leak?

这并不重要,因为当程序退出或崩溃时,程序分配的所有内存都会被释放。您的程序打开的所有文件都会自动关闭,依此类推。

如果由于某种原因,您必须在程序退出或崩溃时执行其他操作,那么是的,您不能仅依赖析构函数。

您可能希望使用 std::set_terminate,而不是将 main 的全部内容放入 try/catch,或类似的东西。

关于c++ - Push_back 和异常安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61424804/

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