指针与参考返回类型

era*_*zap 15 c++ pointers reference

我试图想出一个具体的推理,为什么要在引用上使用指针作为函数的返回类型,

我的理由是,如果无意中将null值返回给引用类型,则无法检查它,并可能导致运行时错误

  int& something(int j)
  {
      int* p = 0 ;  
      return *p;
  }

  void main()
  {
      int& i = something(5);
      i = 7;   // run-time error 
  }
Run Code Online (Sandbox Code Playgroud)

如果我使用了指针,我可以检查它并避免错误,指针返回值将作为合同,必须返回一个值.

 void main()
 {
         int* i = something(5);
         if( i != null )
             *i = 7;
 }
Run Code Online (Sandbox Code Playgroud)

任何想法将再次受到赞赏,

你会用什么以及为什么引用或指针

提前致谢.

And*_*mas 22

如果出现以下情况,您可以使用指针而不是引用:

  • Null是有效的返回值
  • 您在函数中动态构造了某些内容,并且收件人成为所有者.(在这种情况下,您可以考虑返回一个智能指针,如std :: auto_ptr或boost :: shared_ptr.)

无论如何,您不希望返回指针或对局部变量的引用.

  • 对于自2011年以来阅读此(> 2016)的人来说,似乎auto_ptr已被弃用.unique_ptr现在更适合. (4认同)

Car*_*arl 13

参考是一种不同的思维方式.将引用视为"指向现有对象的指针".一旦你这样做,你就会明白为什么它们不能为NULL - 对象存在并且引用指向它.

因此,如果您的函数返回对它创建的内容的引用,则需要保证它实际上确实创建了一个有效的对象.如果它没有,或者不能,那么这就是抛出异常的理由.

与指针对比.指针可以为NULL,调用者必须处理NULL返回值.因此,如果您的函数无法保证它将返回有效的引用并且您不想抛出异常,则需要使用指针.