为什么需要std::reference_wrapper?应该在哪里使用?它与简单的指针有什么不同?它的性能与简单的指针相比如何?
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*/
};
Run Code Online (Sandbox Code Playgroud)
在这里,用户只需要#undef DEBUG_MODE在您想恢复性能时才需要。
是否有 C++ 的库/安全版本可以做到这一点?
编辑:更改了上面的代码,使其实际上更有意义并且不会抛出异常但断言值非空。问题只是一个描述性错误消息与崩溃的问题......