c++ - 当函数返回值是指针并且返回类型是 C++ 中的引用时会发生什么?

标签 c++ pointers reference

伙计们,我刚收到老师的奖励问题!谢谢你帮助我!!

下面的 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/

相关文章:

c# - 可以将 System.Windows.Forms 添加到 WinRT 项目吗?

c++ - “正确”无符号整数比较

c - 为 2 个指针分配相同的值,而不是使它们的引用相等(C 中的指针)

c++ - 如何使用自定义 STL vector 类避免智能指针 delete[] 异常?

c - realloc 误解

c++ - 如果我们将 std::cout 应用于指向成员的指针,我们将收到什么值

javascript - 如何删除或插入 Javascript 多维数组

c# - 两个不同的 "strings"是同一个对象实例吗?

c++ - 通过使用字符串调用新构造函数来创建新对象

c++ - 如何测量 C++ 中特定函数的运行时间{非常准确}