首页 > 解决方案 > 是否有没有未定义行为的 C++ 安全版本?

问题描述

C++ 中的未定义行为很难调试。是否存在不包含任何未定义行为而是抛出异常的 C++ 和标准库版本?我知道这会成为性能杀手,但我只打算在调试模式下编程、调试和编译时使用这个版本,并不真正关心性能。理想情况下,此版本是可移植的,您将能够轻松地打开/关闭未定义的行为检查。

例如,您可以像这样实现一个安全指针类(仅检查空指针,而不是实际上是否指向有效的内存块):

template <typename T>
class MySafePointer {
     T* value;
public:
      auto operator-> () {
          #ifndef DEBUG_MODE
          assert(value && "Trying to dereference a null pointer");          
          #endif
          return value;
      }
      /* Other Stuff*/

};

#undef DEBUG_MODE如果您想恢复性能,用户只需要在此处进行操作。

是否有执行此操作的 C++ 库/安全版本?

编辑:更改了上面的代码,使其实际上更有意义并且不会引发异常但断言值是非空的。这个问题只是一个描述性错误消息与崩溃的问题......

标签: c++undefined-behavior

解决方案


是否存在不包含任何未定义行为而是抛出异常的 c++ 和标准库版本?

不,那里没有。正如评论中提到的,有 Address Sanitizer 和 Undefined Behavior Sanitizer 以及许多其他可用于寻找错误的工具,但没有“没有未定义行为的 C++”实现。

如果您想要一种本质上安全的语言,请选择一种。C++ 不是。


推荐阅读