当函数返回值是指针,而返回类型是c++中的引用时会发生什么
what happens when the function returning value is a pointer and the returning type is a reference in c++?
伙计们,我刚收到老师的一个奖励问题!谢谢你帮我!!
下面的sub2不会导致运行时错误,但可能还有其他错误问题问题出在哪里?
在此处输入代码
int& sub2 ( int& a , int& b ){
int * pc = new int ;
*pc = a - b ;
return (*pc ) ;
}
此函数可能会导致内存泄漏。
-
如果该函数的用户仅依赖于该函数的签名,他将假设该函数返回对其他人拥有的对象的引用。因此,分配的对象将不会被释放。
-
当然,如果用户知道这个技巧,他仍然可以通过获取引用的地址来删除对象
-
如果在较大的表达式中使用该函数(考虑到签名,这非常诱人),例如
sub(3, sub(2,1))
,则他将没有机会捕获临时引用。
请注意,如果内存分配出现问题,此函数MIGHT还会抛出bad_alloc
。
相关文章:
- 什么时候在C++中返回常量引用是个好主意
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 在C++17中,引用const字符串的语义应该是什么
- 引用文件的适当方法是什么?
- 引用捕获和在 lambda 中通过引用发送参数有什么区别 (C++)
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 引用 std::any 或 not_yet_in_std::whatever 的惯用方式是什么?
- 在 Rust 中,指针和引用有什么区别?
- 为什么或在什么情况下,你会将参数作为C++中的引用(或指针)传递给函数?
- 获取通用/前向引用地址有什么意义?
- 返回引用实例和非引用实例(return mystr & vs mystr)之间的区别是什么?
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 普通的右值引用和 std::forward 返回的引用有什么区别?
- 通过引用函数传递指针参数是什么意思?
- C++ 中的引用范围是什么?
- 将引用绑定到指针的语法是什么?(各种)
- constexpr引用有什么用吗
- 对struct::struct的未定义引用是什么意思
- 什么是常量指针常量引用类型的参数?(const X* const & p)