空指针取消引用通常会导致运行时错误,程序立即崩溃。 为什么不使这些情况特殊,抛出异常并允许程序员处理它运行时并保持程序运行?
答案 0 :(得分:8)
因为它们需要非常级别的运行时支持,所以强制检查每个指针访问,大大减慢每个人的C ++程序,无论他们是否想要这种严厉的行为。
您可以自由地创建一个包装类来验证每次访问时的无效性,并在您认为需要时(并且仅在何时)使用该类。然而,这应该被认为是一种设计气味,因为你永远不需要这样的设备。
相反,使用适当的内存管理技术,不用任何空指针就可以了;你的指定生命和你的指针应该是一样的。
答案 1 :(得分:1)
为什么空指针取消引用不是例外?
因为在像C ++这样的语言中没有其他安全漏洞,所以没有意义。为什么要求解除引用空指针会产生异常但不关心解除引用悬挂指针和越界访问?
为什么不让这些案例例外,抛出异常并允许 程序员处理运行时并保持程序运行?
取消引用空指针只不过是编程错误(错误)。当然,如果所有错误都被编译器或运行时捕获,那将是很好的,这样程序员就不会花费数百万个工时来调查它们。这是需要特殊编译模式的正当理由,其中所有此类无效操作都会陷阱。
但是,在测试/调试的程序中,不应发生无效操作。我很难想象合理处理由于一个错误而导致的异常,该错误会使程序保持运行并且符合规范。如果你确切地知道空指针异常可能来自哪里,那么你肯定可以首先防止它。如果它突然从你没想到的地方爆炸,那么我敢打赌你的程序会开始行为不端,即使它完全是异常安全的。我同意,生产环境中发生的此类故障造成的损害将被最小化,但是您仍然需要编程以防止这些异常被解雇,而不是让他们开火然后处理后果。