在C ++中通过引用返回值

Esh200111

我正在做作业,遇到一个问题,要求我们通过引用返回一个值。我的问题是正确的,但是我不确定为什么。谁能向我解释这个成员函数的struct实际工作原理。(或者您甚至可以将我引向详细资源)。成员函数的代码为:

double& SafePtrToDouble::Dereference(){
  if((*this).d!=nullptr){ 
    return *((*this).d);
  }
  else{ throw std::logic_error("Error");}
}

请说一下这个描述是否有点含糊。谢谢!

大卫·费勒

通过引用返回值时,释放返回的引用对象的内存时可能会出现问题。例如,可能发生这种情况,因为对象具有自动生存期,并且变量超出范围并被释放。由于该值是通过引用返回的,因此将导致悬空引用。在您的情况下,引用对象的生存期没有自动生存期。因此,返回的引用在函数调用后保持有效,并且没有悬挂的引用会触发未定义的行为。

典型错误的示例:

double& SafePtrToDouble::Dereference(){
    double retval= 10;
    return retval; //the address of retval is returned
} // the variable retval is freed => reference is dangling now

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++中通过引用返回堆块

来自分类Dev

带有引用的无效函数与在C ++中返回值的函数

来自分类Dev

从C ++ 11中的线程返回值

来自分类Dev

C ++返回值,引用,常量引用

来自分类Dev

了解C#中的返回值

来自分类Dev

C ++中的函数如何以最少的复制量返回值或引用?

来自分类Dev

构造函数和返回值优化(rvo)中的C ++通用引用

来自分类Dev

在C中检查Shell命令的返回值

来自分类Dev

通过将返回值绑定到const引用来提高C ++性能

来自分类Dev

如何从c ++ / cx中的嵌套任务返回值?

来自分类Dev

从C中的struct返回值的逻辑错误

来自分类Dev

警告:忽略C中“ fscanf”的返回值

来自分类Dev

C ++ RapidJSON返回值

来自分类Dev

从管道读取:如何处理c中的返回值?

来自分类Dev

C ++引用和返回值

来自分类Dev

基于if语句的linq列表中的C#返回值

来自分类Dev

区分C中的返回值和错误

来自分类Dev

如何仅获取c中函数的返回值?

来自分类Dev

C:通过参数传递与返回值相比的优势?

来自分类Dev

在C ++中通过引用返回值

来自分类Dev

在C中具有返回值的运算

来自分类Dev

将返回值发送到C ++中的数组

来自分类Dev

混淆从C#中的类方法返回值

来自分类Dev

C ++中的函数如何以最少的复制量返回值或引用?

来自分类Dev

通过引用返回C ++

来自分类Dev

在C ++中创建具有按引用调用返回值的类函数

来自分类Dev

从C中的线程返回值

来自分类Dev

C ++中的返回值

来自分类Dev

在 C++ 中通过引用返回结果