我正在教自己使用异常安全模式编程的技术;)我想知道解除引用指针是否会引发异常?我认为所有C++程序员都知道所有保证不会抛出的操作会很有帮助,所以如果有人能编写这样的列表,我将非常感激.
sbi*_*sbi 11
如果没有指针指向的指定类型的有效对象,则取消引用简单的指针(T*
)可能会导致未定义的行为.它的本质UB那结果可能是任何东西,包括,但不限于,C++异常.人们可以想象一个实现可以检查访问指针并抛出异常.但是,我怀疑C++的这种实现是否会存在(如果你可以节省运行时的开销,为什么要使用C++?)并且大多数平台上的常见行为要么混乱(如果有问题的内存被分配了)到过程)或崩溃.在某些平台上有拦截此类崩溃的方法(如Windows'结构化例外).
但是,一元operator*()
可能会重载,通常用于智能指针和迭代器.这样的实现当然可以执行它们的实现者想要的任何事情,包括但不限于抛出异常.但同样由于运行时开销,常见的智能指针实现只检查调试版本(通常使用某种形式的断言),但不在发布版本中.(一个值得注意的例外是最近的Visual C++实现中的迭代器,它为这种不寻常的行为提供了相当多的热量.)
C++中有一个非常强大的传统,可以区分程序员可能阻止的错误(比如访问数组越界)和程序员无法阻止的错误(如网络连接死亡).对于原始速度,前者通常会导致UB,因为每次检查它们都会导致性能下降.程序员可以在适当和必要的地方进行检查.
您可以在标准库的异常层次结构的定义中看到这种区别,该异常层次结构分为可预防std::logic_error
和不可预防std::runtime_error
.
归档时间: |
|
查看次数: |
558 次 |
最近记录: |