伙计们,我刚收到老师的奖励问题!谢谢你帮助我!!
下面的 sub2 不会导致运行时错误,但可能有一些其他的 问题。有什么问题?
在此输入验证码
int& sub2 ( int& a , int& b ){
int * pc = new int ;
*pc = a - b ;
return (*pc ) ;
}
最佳答案
此函数可能会导致内存泄漏。
如果此函数的用户仅依赖于该函数的签名,他将假定该函数返回对其他人拥有的对象的引用。因此,分配的对象不会被释放。
当然,如果用户知道这个技巧,他仍然可以通过获取引用地址来删除对象
如果函数用在更大的表达式中(考虑到签名,这很诱人),例如
sub(3, sub(2,1))
他将不会得到 catch 临时引用的机会。
请注意,如果内存分配存在问题,此函数也可能会抛出 bad_alloc
。
关于c++ - 当函数返回值是指针并且返回类型是 C++ 中的引用时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29316665/