gpt4 book ai didi

c++ - 无效指针处理策略

转载 作者:行者123 更新时间:2023-11-28 00:17:24 27 4
gpt4 key购买 nike

我觉得如果函数中传入了空指针,只要让它gp,我们就可以很容易地找到根本原因。但是我的队友说我们应该避免生产代码中的 gp 时间,如果应用程序经常崩溃,客户可能会感到不安,尽管根本原因可能包含在一些空指针保护中。

当您需要验证指针是否为空时,您会使用哪种方法?

HRESULT function(const int* pNumber)
{
{ POINTER CHECK for pNumber... }
...
}

方法一——忽略无效大小写

if(pNumber)
{
int a = *pNumber;
}
  • 没有全科医生
  • 可能进入异常流量
  • 很难找到根本原因

方法 2 - 断言指针,在 Debug模式下发出警告

assert(pNumber);
int a = *pNumber;
  • 5 月 GP 处于 Release模式
  • 绝不进入异常流量
  • 容易找到根本原因

方法三-留下调试信息并返回错误码

if(!pNumber)
{
OutputDebugString(L"Error Null pointer in function.\n");
return E_POINTER;
}
  • 没有全科医生
  • 切勿在函数内部输入异常流。客户端如果忽略返回的E_POINTER可能会进入异常流量外
  • 默默地很难找到根本原因

方法 4 - 抛出 logic_error 异常 - 让调用者捕获

if(!pNumber)
{
throw std::logic_error("Null pointer of pNumber in function");
};
  • 没有全科医生
  • 当堆栈展开时,在没有资源管理 (RAII) 的情况下代码序列中可能存在资源泄漏。
  • 绝不进入异常流量
  • 很难找到异常抛出的地方

最佳答案

如果你取消引用一个nullptr,你就进入了未定义行为的领域。这意味着,您的编译器没有义务执行 anything sensible ,所以这真的应该避免。它还可能决定,因为它是非法的,所以它从未发生过,所以它删除了相应的代码(并因此对其进行了优化)并且您有逻辑错误而不会遇到一般保护错误。

如果 nullptr 绝对无效,我个人更喜欢 assert 的情况,但在那种情况下,无论如何引用可能更明智。我认为没有通用的政策,因为它在很大程度上取决于周围的逻辑。

关于c++ - 无效指针处理策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29361784/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com