【C++总结】关于函数返回对象析构的问题
来源:互联网 发布:java离线安装包 32位 编辑:程序博客网 时间:2024/05/16 19:45
class Person {public: string name;public: Person() { name = "ttf"; } ~Person(){ cout << this->name <<endl;; } Person &changeName();};Person &Person::changeName() {// Person p; return *this;}int main() { Person p; Person p1 = p.changeName(); return 0;}
就是下面这个函数返回的是一个引用
因为返回是引用并且这个对象是外部定义的,所以返回引用没有任何问题
Person &Person::changeName() { return *this;}
下面这个返回引用就会出问题
Person &Person::changeName() { Person p; return p;}
问题在于,函数内部定义的对象,必须要在函数结束的时候回收。然而这个函数,却把定义的对象本身返回了,导致函数内部定义的这个对象不能析构。导致内存泄露。
所以如果返回函数内部定义的对象一定不要返回引用
下面是正确的
这时返回对象p的副本,原来定义的p在函数结束以后就析构了
Person Person::changeName() { Person p; return p;}
0 0
- 【C++总结】关于函数返回对象析构的问题
- 关于C语言函数返回数组的问题
- 关于在C/C++语言中,函数如何返回数组,数组如何作为参数传递以及返回数组的函数该如何调用问题的总结
- 关于C语言函数返回值问题
- 关于system函数返回值的总结
- 函数返回文档对象的问题
- 关于函数返回值的问题
- 关于函数返回字符串常量的问题
- 关于printf函数的返回值问题
- 关于函数返回局部变量的问题
- python:关于函数返回return的问题
- 关于mybatis返回单一对象或对象列表的问题
- 关于mybatis返回单一对象或对象列表的问题
- 关于mybatis返回单一对象或对象列表的问题
- C语言中关于scanf()函数返回值问题
- <C语言>关于函数返回值是指针,取不到值的问题研究
- 关于函数的返回值是一个接口类型的对象
- 关于C++函数返回局部对象的详细分析
- va_arg
- Oracle 执行计划(Explain Plan) 说明
- poi导入excel2007没问题导入2003报错IncompatibleClassChangeError
- cognos cube分区
- 解决不同版本opencv链接库出错问题
- 【C++总结】关于函数返回对象析构的问题
- 前景提取--PBAS算法
- 全文搜索的数据库及实体实现
- 第12周 项目4 点、圆的关系
- Spring学习笔记_装配bean_02
- 如何在PowerShell中把密码保存到文件
- 生产环境超时库存回收优化
- Spring学习总结(2.3)-Spring MVC:handlermapping
- jQuery操作css-position()与offset()方法的区别