我正在做作业,遇到一个问题,要求我们通过引用返回一个值。我的问题是正确的,但是我不确定为什么。谁能向我解释这个成员函数的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] 删除。
我来说两句