问题标签 [exception-safe]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 你怎么知道一个方法可以抛出的所有异常
有没有办法获得有关 Java 标准类的异常安全方面的一些详细信息?主要使用 C++ 和 C#,我对 Java 异常规范感到困惑,所以我需要了解处理异常的正确方法。
更具体地说,让我们考虑ServerSocket
. 一旦构建了它的对象,它就开始监听传入的连接。然后,您应该使用accept()
接受连接(如果有人尝试连接)。
如果您之前使用 配置了服务器套接字,则会setSoTimeout()
发生更改,因为在指定的时间段内没有人尝试连接。没关系,服务器套接字仍然可用,所以你只需再次调用。accept()
SocketTimeoutException
accept()
但SocketTimeoutException
并不是唯一accept()
可能抛出的东西。所有其他例外是什么意思?accept()
如果我用 2 个 catch 子句包装调用: for SocketTimeoutException
and ,在进入子句后我IOException
还能安全地使用相关实例吗?ServerSocket
IOException
我非常感谢 Java 范围和特定于 ServerSocket 的答案。
c++ - 有一个抛出交换成员实现可以吗?
编写类时的一般准则(使用复制和交换习惯用法)是提供一个非抛出交换成员函数。(Effective C++,第 3 版,第 25 条和其他资源)
但是,如果因为我的班级使用不提供交换操作的第 3 方班级成员而无法提供 nothrow 保证怎么办?
CString 交换不能不抛出,因此交换失败的可能性很小。
注意:对于罕见的第 3 方课程,可以选择使用智能 ptr (pimpl),但是--
注意:CString 是一个很好的例子,因为他头脑正常(?)的人不会开始通过 pimpl(智能 ptr)持有概念上简单且无处不在的类的所有成员,例如 CString,因为这看起来真的很可怕——另一方面,没有(短期到中期)机会来修改 CString 以允许完全不抛出交换。
那么,如果你不能帮助它,是否可以有一个潜在的抛出交换成员函数?(或者你知道解决这个难题的方法吗?)
编辑:并且:如果不是强保证,是否可以将抛出交换成员与复制和交换习语一起使用以提供基本保证?
java - 同步关键字异常安全吗?
可能重复:
在同步子句中抛出异常的副作用?
我想知道是否synchronized
是异常安全的?比如说,在同步块中发生了未捕获的异常,锁会被释放吗?
c# - C# 中的范围保护语句
Resource Acquisition Is Initialization (RAII) 习语和 try-finally 语句构成了编写异常安全编程的传统方法的支柱。
我的问题是:C# 上是否有类似Scope Guard Statement的东西?
c++ - C++ 中包含的 C 标准库函数是否抛出异常?
在下面的代码中,作者指出new operator
函数调用可能会导致异常,因此此实现不是异常安全的,因为对象状态已在第一行中更改。
在阅读时,我想知道 C 库函数是否会在 C++ 中引发异常?我知道 C 中没有异常,但是由于我们使用的是 C++ 编译器,因此可能会有异常。
那么,我们可以将 c 标准库函数视为异常安全函数调用吗?
谢谢你。
顺便说一句,为了记录,实现上述功能的正确方法(异常安全)如下。
c++ - unique_ptr<>() 初始化会失败吗?
从std::unique_ptr<>()的文档中,我不清楚初始化指针时可能发生的情况。
分配 时std::shared_ptr<>()
,它会分配一个内存缓冲区来处理引用计数器。所以我可能会得到一个std::bad_alloc
例外。
初始化唯一指针时会发生类似的事情吗?
我问这个问题是因为如果确实如此,我实际上可能会丢失我试图通过唯一指针删除的内容。例如:
所以,如果初始化unique_ptr<>()
可以抛出,我最终可能会永远保持文件f
打开。(我FILE *
以此为例,任何类似的资源都可能受到影响。)
与这个答案相反,我显然不能使用std::make_unique<>()
,因为我不只是分配内存。
std::unique_ptr<>()
在之前初始化fopen()
,然后在其中保存值会更安全吗?
还是会有类似的问题?