Message :: GetDescriptor()可以返回null吗?

时间:2017-05-31 05:13:28

标签: c++ protocol-buffers

我总是在使用之前检查Message::GetDescriptor()的返回值,但什么时候会返回null?是否可能没有必要检查返回值?

文档:

https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.message#Message.GetDescriptor.details

声明:

const Descriptor * 
    Message::GetDescriptor() const

2 个答案:

答案 0 :(得分:1)

您应该始终检查代码调用的可能每个API 的返回类型,并且绝不应该做出任何假设但是可靠的API可能是。 API由于人为控制之外的各种原因而失败: -

  • 网络状况波动,包括​​PHY中断(在这种情况下不适用)
  • 系统运行运行 Out of Resource (如空间
  • )的API的实现
  • 系统过载(对其他进程太忙)
  • 不可靠的API实现(错误) 等.. ..

由于API来自 Google ,他们做出了一个天真的假设,即第四个原因永远不会成真,只需降低软件的健壮性。 99.99%的时间它似乎只是一个冗余检查或过度保护代码 - 但是当它失败时,它会有0.01%的时间从你的软件中获得不可靠的行为

根据我多年来的经验,可以很容易避免(如果不是固定的)成本最高的错误,这是忽略简单和基本错误处理的结果

答案 1 :(得分:0)

您不必检查它,对于每条消息,您应该获得非NULL指针。