C++返回值、返回引用、返回地址

函数内的对象的保留和处理:

1.当函数结束时,所有除了堆中的对象之外的函数成员,全部都会被处理掉,无法保留。

2.在返回过程中,无论是引用、指针、还是值,只要是跟在return后面的,都会以复制的方式来返回。

但是复制引用和指针并不代表复制所引用,所指向的对象(内存对象),因此,复制只是复制了一个入口

因此,复制方式更节省资源。

在函数的return后面被作为返回复制出来的东西(包括值,引用和指针),都会在函数被调用的那一行执行

结束后被清理掉(只有一种情况例外,就是被复制出来的是值,而值被赋予了一个引用)。

因此,在被清理掉之前,要想完成传递,必须把它们赋予另一个变量或引用或指针。但是赋予变量或引用或指针,却将会导致不同的结果。

1.赋予变量的任何返回内容,都会被变量所保存,因为变量就是实实在在的内存,能够存东西

2.赋予引用的返回对象,如果是引用的话,其实等于只保存一个入口地址,却没有保存下实实在在的内容

3.将指针赋予指针会出现以下两种情况,如果指针指向栈中的对象,结果和引用赋予引用差不多;

如果指针指向堆中的对象,则可以看作是指针得到了继承,一个指针通过它所继承的另一个指针所记录的地址,

成功找到了

从表现和操作流程上来说

1.函数如果返回的是值,那么在函数调用时,返回的值会被从函数中复制出来使用。

当函数结束时,函数中的对应对象会被析构或结束,但复制出来的这一份仍然存在

2.函数如果返回的是引用,那么在函数调用时,引用的对象不会被复制,只是引用本身被复制。

问题:使用引用这个问题,会导致当函数结束时,引用的对象也同时被析构,因此引用会变成空引用。

由于不会被复制,因此除非被赋予一个新的对象,否则如果被赋予的对象是引用或是指针,会导致

引用和指针将要被析构的函数内的对象,于是,当函数内的对象被析构时,引用就会为空,而指针则

虽然找到了地址,但是指针指向的值已经失效。

3.函数如果返回的是指针,函数调用时,指针指向的对象不会被复制,只会复制指针本身,使用该指针

同样存在指向对象被析构的危险。

但如果指针指向的对象在堆中的话,则可以继续使用。

如果是栈中的对象,则会出问题,栈中的对象在函数结束时会被自动析构。

函数返回注意事项:

1.绝对不要返回pointer或者reference指向local stack对象

2.绝对不要reference指向一个heap-allocated对象

3.绝对不要返回pointer或者refenence指向一个local static 对象有可能同时需要多个这样的对象(单实例对象可以返回)

参考文档:https://blog.csdn.net/boiled_water123/article/details/105936027

相关推荐
周末也要写八哥4 分钟前
线程的生命周期之“守护“线程
java·开发语言·jvm
乐之者v5 分钟前
地图技术后端开发的知识点
java
亦暖筑序11 分钟前
Java 8老系统AI工具接入:API包装成受控工具,只读优先+权限拦截
java·人工智能·aigc·企业架构·mcp协议
砍材农夫12 分钟前
物联网实战:Spring Boot + Netty 搭建 MQTT 统一接入层
java·网络·spring boot·后端·物联网·spring
写代码的小阿帆13 分钟前
英语四六级证书审核(SpringBoot+Dify+RPA)
java·spring boot
redaijufeng14 分钟前
我在C++中深入理解了继承,收获颇丰
java·c++·算法
.千余14 分钟前
【C++】C++继承入门(上):继承语法与基本特性详解
开发语言·c++·笔记·学习·其他
就叫_这个吧21 分钟前
HTML或JSP页面链接CSS,link标签没问题,但不显示样式问题解决
java·前端·css·html·intellij-idea·jsp
阿坤带你走近大数据26 分钟前
分别介绍下java主流的开发框架、设计模式与对应编程语言的高级特性
java·开发语言·设计模式
哎呦,帅小伙哦34 分钟前
一个通用的异步任务提交器
c++