当我抛出异常时,内存会被释放吗?

2023-12-24

我正在与一些同事争论当你在动态分配的类中抛出异常时会发生什么。我知道malloc被调用,然后是类的构造函数。构造函数永远不会返回,那么会发生什么malloc?

考虑以下示例:

class B
{
public:
    B()
    {
        cout << "B::B()" << endl;
        throw "B::exception";
    }

    ~B()
    {
        cout << "B::~B()" << endl;          
    }
};

void main()
{
    B *o = 0;
    try
    {
        o = new B;
    }
    catch(const char *)
    {
        cout << "ouch!" << endl;
    }
}

分配的内存会发生什么o,泄漏吗? CRT 是否捕获构造函数的异常并释放内存?

Cheers!
Rich


致电

new B();

解决两件事:

  • 使用运算符 new() 进行分配(全局运算符或特定于类的运算符,可能是具有以下语法的放置运算符new (xxx) B())
  • 调用构造函数。

如果构造函数抛出异常,则调用相应的删除操作符。相应的删除是放置删除的情况是调用放置删除运算符而不使用语法 ::operator delete() 的唯一情况。delete x; or delete[] x;不要调用布局删除运算符,并且没有与布局新类似的语法来调用它们。

请注意,虽然 B 的析构函数将not被调用时,已经构造的子对象(成员或 B 和 B 的基类)将在调用运算符删除之前被破坏。未调用的构造函数是 B 的构造函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我抛出异常时,内存会被释放吗? 的相关文章

  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当

随机推荐

  • 如何从 shell 脚本编辑 kubernetes 资源

    我浏览了文档来使用以下命令编辑 kubernetes 资源kubectl edit https kubernetes v1 4 github io docs user guide kubectl kubectl edit 命令 执行命令后
  • 重定向路线并显示消息

    我想知道是否有办法重定向路线或返回Response与数据并在另一个页面上获取它loader功能 基本上 我试图使用表单创建一个新对象 并重定向到另一个我想要显示创建成功消息的页面 这是一个表单页面示例 我正在尝试发送消息Response b
  • 如何知道topojson是否安装并正常工作?

    如何知道topojson是否安装好并且工作正常 一个要转换的小文件示例将不胜感激 包含源和预期结果 如果您还没有偶然发现这一点 我发现它是整个过程的一个很好的演练 http bost ocks org mike map http bost
  • 如何在 Java 中使用 Selenium WebDriver 和/或 Sikuli 平滑滚动

    作为测量 Web 应用程序 FPS 的测试套件的一部分 我需要执行网页的平滑滚动 也就是说 与用户抓住滚动条并用鼠标移动它时的平滑度相同 到目前为止 我已经尝试使用 sikuli 模拟按键 即多次按向上 向下箭头键来滚动整个页面 我也尝试过
  • Prometheus基于Label的过滤

    如何在Prometheus查询中添加标签过滤器 kube pod 信息 kube pod info created by kind ReplicaSet created by name alertmanager 6d9f74d4c5 ins
  • 通过 facebook graph api 创建事件

    有没有办法通过代码创建 facebook 事件 截至今天 请参阅文档 for v2 0 https developers facebook com docs graph api reference v1 0 event for v1 0 h
  • Spring 5 功能性 Web 框架无法与 Eureka 客户端一起使用

    当我启用微服务环境 Config Server Service Registry Eureka Gateway Zuul 时 Spring 5 功能 Web 框架无法工作 我有一个 Maven Spring Boot v 2 0 0 M3
  • 没有提交消息的 Git 提交

    如何在不指定提交消息的情况下提交更改 为什么默认需要它 git 通常需要非空消息 因为提供有意义的提交消息是良好开发实践和良好存储库管理的一部分 提交消息的第一行在 git 中随处可见 欲了解更多信息 请阅读 关于 Git 提交消息的注释
  • posmax:类似于 argmax,但给出了 f[x] 最大的元素 x 的位置

    Mathematica 有一个内置函数ArgMax http reference wolfram com mathematica ref ArgMax html对于无限域上的函数 基于标准数学定义 http en wikipedia org
  • 添加预览到 html 链接标签

    当我们共享一些链接时 它会显示一个链接预览图像和一些文本 我们如何添加到我们的http链接 希望我的问题很清楚 OG 可能就是您正在寻找的东西 它是一组具有特定属性的元标记 它们处理链接共享后显示的标题 描述和图像 更多这里 about O
  • 如何在Django中存储图像文件?

    Django 中存储图像文件的典型场景是什么 更具体地说 图像是否直接存储在本地文件系统或 Amazon S3 上的数据库 blob 例如 MongoDB GridFS 中 对于这三种情况 是否有工具或 django 软件包可用于简化您存储
  • 为什么 VS Code 中的 Nodejs 断点会根据完整路径是否出现在选项卡标题中而被禁用?

    我的 Mocha 测试中的断点在一个 VS Code 选项卡中的完全相同的行上设置时有效 但在另一个选项卡中则无效 区别 如果选项卡中显示完整路径 则断点有效 屏幕截图中的第二项 但是 如果没有路径的文件名出现在选项卡标题中 则断点在执行期
  • Linux X11 - 全局键盘挂钩

    是否有可能 或如何 创建一个像 Windows 中的全局钩子 SetWindowsHookEx 一样工作的机制 在 Linux X11 C 中 我希望能够赶上关键事件 但进一步传播的可能性 我正在尝试使用XGrabKey https sta
  • 如何使用 UICollectionview 播放 Facebook 风格的视频

    我正在尝试播放视频UICollectionview电池使用ZOW视频播放器 https github com stoncle ZOWVideoPlayer 视频播放完美 但目前我的集合视图正在播放所有可见视频 我只想播放单个完全可见的视频
  • JVM堆未释放

    我是分析 Java 内存问题的新手 如果这个问题看起来很幼稚 请原谅我 我的应用程序运行时设置了以下 JVM 参数 Xms3072m Xmx3072m XX MaxNewSize 1008m XX NewSize 1008m XX Perm
  • 如何在 Windows 窗体 PictureBox 中选择区域?

    我想通过允许用户选择来获取 PictureBox 中图片的一部分 矩形区域 类似于在 Photoshop 中使用选择工具完成的操作 我怎样才能做到这一点 您必须根据单击和拖动的位置绘制矩形或线条 你的起点是鼠标 x y 然后你会从鼠标释放
  • 如何使用 Twitter 搜索 API 获取推文的位置

    The statuses user timelineTwitter API 的一部分将地理位置数据作为 地点 与每条推文一起返回 另一方面 搜索 API 不会返回此位置数据 据我所知 有没有办法通过搜索 API 获取位置数据 有一个geo每
  • 使用 Python 实例化 TensorFlow 模型时出现 google.protobuf.text_format.ParseError

    我使用的是 Ubuntu 16 04 我有 Python 2 7 12 Python 3 5 2 tensorflow 1 2 0 rc1 protobuf 3 3 0 我想关注这个tutorial https gist github co
  • 如何从现有的“步骤列表”定义匹配的轴槽口

    我需要一种方法来对齐两个单独轴上的刻度线 同时能够控制 步长 值 刻度线之间的值 其中两个轴都从标记 0 开始并以不同的最大值结束 为什么会出现这个问题 Flot JS 图表包有一个对齐刻度线的选项 但是当我这样做时 我无法控制步长值 然而
  • 当我抛出异常时,内存会被释放吗?

    我正在与一些同事争论当你在动态分配的类中抛出异常时会发生什么 我知道malloc被调用 然后是类的构造函数 构造函数永远不会返回 那么会发生什么malloc 考虑以下示例 class B public B cout lt lt B B lt