C++入门经典 笔记 (第十三章)高级引用和指针
来源:互联网 发布:windows桌面程序开发 编辑:程序博客网 时间:2024/06/05 16:47
前面讲到,每次按值将对象传入函数时,都将创建该对象的一个备份。每次按值从函数返回一个对象时,也将创建其备份。对于用户创建的大型对象,备份的代价很高。这将增加程序占用的内存量,而程序的运行速度也将会变慢。按引用传递避免了创建备份以及调用复制构造函数,所以它的效率会更高。
但有一个非常重要的问题是,虽然将指针传递给函数的效率更高,但很危险。如果不想要函数修改对象的值,即要同时获得按值传递的安全性和按引用传递的效率,就必须传递一个指向对象的const指针,这可以禁止对对象调用任何非常量成员函数,从而禁止修改该对象。
什么情况下使用引用以及什么情况下使用指针
一般而言,C++程序员更喜欢使用引用而不是指针,因为它们更清晰,使用起来更容易。然而,引用不能重新赋值,如果需要依次指向不同的对象,就必须使用指针。引用不能为NULL,因此如果要指向的对象可能为NULL,就必须使用指针,而不能使用引用。如果要从堆中分配动态内存,也要使用指针。
程序在堆中分配内存时,将返回一个指针。必须一直让某个指针指向这块内存,因为指针丢失后,便无法释放该内存,进而导致内存泄露。如果我们要编写这样的函数,即它需要分配内存块并将其传递给调用它的函数,应该考虑修改接口:让发出调用的函数分配内存,然后按引用将其传递给被调用的函数,这样,便可以做到在哪个函数中分配内存,就在哪个函数中释放内存了。
问:为何要从函数按值返回?
答:如果返回的是局部对象,即在这个函数中所定义的对象(除去在堆中所定义的对象),必须按值返回,否则返回的引用将指向不存在的对象。
0 0
- C++入门经典 笔记 (第十三章)高级引用和指针
- 《C和指针》第十三章 高级指针话题
- C++入门经典 笔记 (第十一章)开发高级指针
- C和指针读书笔记(第十三章)
- C和指针 第十三章
- 《C和指针》经典入门程序
- 经典问题解析(1)---const和引用、指针与引用、函数重载、C方式编译
- C++入门经典 笔记 (第九章)高级类
- C++入门经典 笔记 (第十四章)高级函数
- 《C++Primer》笔记 第二章2.3 指针和引用
- C++入门经典 笔记 (第十二章)创建引用
- 指针和引用(c++)
- C#入门经典第十三章
- 重读经典:C和指针学习笔记
- (福利)”C++Primer笔记“和”Java经典入门笔记“
- C++入门经典 笔记 (第二十章)使用特殊的类、函数和指针
- C语言入门第十三篇,指针
- C++入门经典 笔记 (第十章)创建指针
- ExpandListView使用自定义对象时异常
- 第8章 进程控制
- 系统可用性衡量指标MTTR|MTTF|MTBF
- JAVA基础学习(四)---数组的操作
- java设计模式-模版方法
- C++入门经典 笔记 (第十三章)高级引用和指针
- [LinkerScript.2] 链接器脚本格式 - Linker Script Format
- scala学习之:scala并发编程(三)
- 《IOS_OC》类和对象
- PJAI
- java.lang.ClassNotFoundException: Didn't find class "*****Activity" on path: /data/app/*******.apk
- IPV4上建立IPV6隧道以及IPV6上建立IPV4隧道
- linux之read命令
- linux中断处理原理分析