首页 > 编程语言 >C++ 中不应抛出异常的函数总结

C++ 中不应抛出异常的函数总结

时间:2024-07-22 09:08:17浏览次数:10  
标签:函数 中不应 C++ 析构 抛出 移动 异常 构造函数

在 C++ 中,异常处理是一个重要的特性,它允许程序在遇到错误时能够优雅地恢复。

然而,并不是所有的函数都适合抛出异常。以下是一些不应抛出异常的函数类型:

  1. 析构函数:
    • 析构函数负责资源的清理和释放。如果析构函数抛出异常,并且没有被捕获,那么程序可能会终止。这会导致资源泄露或程序状态的不一致。
  2. 移动构造函数和移动赋值运算符:
    • 移动构造函数和移动赋值运算符负责对象的移动语义。如果这些函数抛出异常,那么可能会导致资源泄露或对象状态的不一致。
  3. swap 函数:
    • swap 函数用于交换两个对象的状态。如果 swap 函数抛出异常,那么可能会导致对象状态的不一致。
  4. 内存分配和释放函数:
    • operator newoperator delete,这些函数负责内存的分配和释放。如果这些函数抛出异常,那么可能会导致内存泄露或程序崩溃。
  5. 标准库中的非抛出异常函数:
    • 标准库中的一些函数,如 hash、less 等。

总之,在设计函数时,应仔细考虑是否应该抛出异常。对于上述类型的函数,最好使用错误码、断言或其他机制来处理错误,而不是抛出异常。这样可以提高程序的健壮性和可靠性。

更进一步地,可参见如下详细介绍:

  1. 全局对象的初始化过程不可抛出异常
  2. 析构函数不可抛出异常
  3. 内存回收函数不可抛出异常
  4. 对象交换过程不可抛出异常
  5. 移动构造函数和移动赋值运算符不可抛出异常
  6. 异常类的拷贝构造函数不可抛出异常
  7. 异常类的构造函数和异常信息相关的函数不应抛出异常
  8. 与标准库相关的 hash 过程不应抛出异常

 

标签:函数,中不应,C++,析构,抛出,移动,异常,构造函数
From: https://www.cnblogs.com/lucky-bubble/p/18315330

相关文章

  • 如何将可选类型从 C++ 传递到 Cython?
    我正在尝试将可选参数从C++传递到Cython文件。我不必将其写入.pxd和.pyx文件中:[C++]std::optional<std::shared_ptr<CPP_MyObject>>cpp_find_value();[.pxd]shared_ptr[CPP_MyObject]cpp_find_value()#fixme[.pyx]defpython_find_value(self)......
  • 【普及组】广度优先搜索BFS——到达型搜索问题_C++算法竞赛
    文章目录1.走迷宫例1.洛谷B3625迷宫寻路例2.洛谷P1825[USACO11OPEN]CornMazeS例3.[ABC348D]MedicinesonGrid(AtCoder)2.生活背景下的常见问题例.P3958[NOIP2017提高组]奶酪3.输出路径例.洛谷P6207[USACO06OCT]CowsonSkatesGEnd提示:本文建议有一定......
  • C++引用(reference)
    在C++中,引用(reference)是一个已存在变量的别名,它允许你为变量提供一个或多个额外的名字。引用在定义时必须初始化,并且一旦初始化后,就不能再引用其他变量。引用和它所引用的变量共享相同的内存地址。以下是C++中引用的基本用法:cpp#include<iostream>intmain(){inta=10;......
  • c++ class 和继承
    c++class和继承  #include<iostream>#include<string> //基类classAnimal{protected:std::stringname;public:Animal(conststd::string&name_param):name(name_param){}virtualvoidspeak()const=0;//纯虚函数,派生类需要实现}......
  • C++标准模板(STL)- 概念库 (C++20) - 指定一个类型派生自另一类型 - (std::derived_from)
    概念库提供基础语言概念的定义,它们能用于进行模板实参的编译时校验,以及基于类型属性的函数派发。这些概念在程序中提供等式推理的基础。标准库中的大多数概念一同加上了语法及语义要求。通常,编译器只能检查语法要求。若在使用点语义要求未得到满足,则程序为病式,不要求诊断。......
  • C++11(2): 通用
    31.继承构造函数structB:A{usingA::A;};32.委派构造函数classA{public: A() :A(1234){}//先调用A(int) A(intn1):A(n1,'C'){}//先调用A(int,char) A(charc1):A(2,c1){}//先调用A(int,char)private: A(intn2,charc2):my_......
  • c++ 引用和指针
      c++引用和指针在C++中,引用和指针是两个非常重要的概念,它们有一些相似之处也有一些不同之处。相似之处:引用和指针都可以指向一个对象。引用一旦被初始化指向一个对象后,就不能再指向其他对象,而指针可以在任何时候指向其他对象。不同之处:引用在......
  • 快速完成VsCode C/C++开发环境配置
    前言本人在配置VsCodeC++开发环境时,查看了很多的博客,内容参差不齐,尤其是关于json文件的配置,绕的人头很晕,最终还是通过阅读官方文档,结合部分博客的指引,完成了环境的配置,在此记录本人的配置过程,希望能帮助到大家。事先声明,本文的内容大量引自VsCode官方的文章:https://code.visual......
  • OpenCV 遍历Mat,像素操作,使用TrackBar 调整图像的亮度和对比度 C++实现
    文章目录1.使用C++遍历Mat,完成颜色反转1.1常规遍历方式1.2迭代器遍历方式1.3指针访问方式遍历(最快)1.4不同遍历方式的时间对比2.图像像素操作,提高图像的亮度3.TrackBar进度条操作3.1使用TrackBar调整图像的亮度3.2使用TrackBar调整图像的对比度1.使用C++遍历M......
  • C++吃豆人~
    #include<cstdio>#include<iostream>#include<ctime>#include<conio.h>#include<windows.h>#include<cstdlib>#include<cstring>usingnamespacestd;constintn=809;structPoint{intx,y;};intdali;intfx[......