函数返回一个指向对象的指针,在这种情况下我该返回什么?

时间:2014-11-07 21:58:29

标签: c++ pointers return

如果你有一个通过查找数组中具有特定属性的对象返回指向对象的指针的函数,如果我在数组中找不到相应的对象,我应该返回什么?而且,如果做得不好,这是否会对计划的安全性或稳定性造成风险?

3 个答案:

答案 0 :(得分:7)

  

如果你有一个函数通过查找返回指向对象的指针   对于特定属性到这些对象的数组,应该是什么   如果我没有在数组中找到该属性,我会返回?如果完成的话   这很可能对安全或稳定造成风险   程序

您有三种基本可能性:

  • 只需返回一个空指针。这是最简单的方式,也可能是最好的方式。
  • 抛出异常。最好是特殊类型,但std::out_of_range也可以。
  • 返回指向默认对象的指针。只有在返回值必须指向有效对象时才合理。

无论您选择什么,都必须记录在案,并尽可能与其他案例保持一致。

答案 1 :(得分:5)

您可以使用约定返回nullptr,调用者应该测试该情况。或者你可以抛出异常。

你可能会使用一些智能指针。

使用C ++ 11,您可以采用不同的方法:传递lambda函数来处理找到的对象。

答案 2 :(得分:2)

  

如果你有一个函数通过查找返回指向对象的指针   对于特定属性到这些对象的数组,应该是什么   如果我在阵列中找不到该属性,我会回来吗?如果完成的话   这很可能对安全或稳定造成风险   程序

正如Columbo所说:

  

您有三种基本可能性:

     
      
  • 只需返回一个空指针。这是最简单的方式,也可能是最好的方式。
  •   
  • 抛出异常。最好是特殊类型,但std::out_of_range也可以。
  •   
  • 返回指向默认对象的指针。只有在返回值必须指向有效对象时才合理。
  •   

但是,我不同意你选择的选项。只有前两个可以合理地考虑,除非你确定你将永远返回一个有效的对象。

  

而且,如果做得不好,这可能代表安全或风险   程序的稳定性?

是。想象一下,您选择了可能性#3并将其记录在您的API中。调用者每次都期待一个有效的对象。并且,让我们说您的应用程序是服务器的关键组件,攻击者发现一个漏洞会导致覆盖表中的数据。这很可能会导致您的应用崩溃:您立即遭受拒绝服务攻击。这真的不是一个遥不可及的场景......

如果没有这么做,如果做得不好,你可能会返回无效指针,这可能会导致应用程序崩溃。然后,任何做得很糟糕的事情都会导致黑暗的一面......