相关疑难解决方法(0)

C++中的安全指针解除引用

在我们的代码库中,我们有许多这样的结构:

auto* pObj = getObjectThatMayVeryRarelyBeNull();
if (!pObj) throw std::runtime_error("Ooops!");
// Use pObj->(...)
Run Code Online (Sandbox Code Playgroud)

在99.99%的情况下,不会触发此检查.我正在考虑以下解决方案:

auto& obj = deref_or_throw(getObjectThatMayVeryRarelyBeNull());
// Use obj.(...)
Run Code Online (Sandbox Code Playgroud)

deref_or_throw声明如下:

template<class T> T& deref_or_throw(T* p) {
  if (p == nullptr) { throw std::invalid_argument("Argument is null!"); }
  return *p;
}
Run Code Online (Sandbox Code Playgroud)

该代码更清晰,可以根据需要使用.

问题是:我是否重新发明轮子?在标准或提升中是否有一些相关的解决方案?或者你对解决方案有一些评论?

PS.相关问题(没有令人满意的答案):是否存在与NullPointerException相当的C++

c++ exception nullpointerexception dereference

14
推荐指数
1
解决办法
996
查看次数

空指针的C++异常

我有一个小功能(在DLL中),看起来像这样:

int my_function(const char* const s)
{
    try {
        return my_object->do_something_with(s);
    } catch (exception& e) {
        return ERROR_CODE;
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为try-catch块可以防止内部可能发生的任何事情my_object传播到外部.不幸的是,我错了,我调用此函数的程序(来自VB)刚停止工作,因为我传递了一个空指针参数.

那么,为什么我的try-catch块不能像(I)那样工作呢?有解决方法吗?我以前在Java中编程很多,我认为它会在那里工作......

c++ exception-handling nullpointerexception

5
推荐指数
2
解决办法
9782
查看次数