C++之临时对象、常引用和浅拷贝探究
和结构体一样,一个类的对象也可以以值,指针或者引用的形式作为函数的参数或返回值。一般情况下,为了避免创建临时对象通常传对象的引用,并且为了避免在函数体内修改对象的值,通常使用常引用:
const Point middle (const Point& p1, const Point& p2) ;
如果函数以传值形式返回一个类的对象,编译器会创建一个临时对象来保存这个值。但有些编译器会做优化。
用一个简单例子来说明临时变量:
同理,临时对象:
用下例来说明常引用:
浅拷贝:
可以把一个对象赋值给另外一个对象,对象的每个成员的值,将一对一的拷贝到新的对象。这种拷贝叫浅拷贝,或逻辑拷贝。但是,如果对象含有指针成员变量,而指针变量又指向堆上空间,将只拷贝指针成员变量本身的值,造成两个对象的指针指向同一块堆上的内存空间,删除对象时将造成二次删除。
首先看一个正常运行的程序:
对指针变量浅拷贝后程序奔溃:
附侯捷老师《面向对象高级开发》相关内容讲义图:
续:C++之一个函数链的简单例子(分文件实现)
C++之临时对象、常引用和浅拷贝探究相关推荐
- c++ 返回对象的引用要小心
除非能保证返回对象的生命周期足够长. 一定不要返回临时对象的引用.
- C++对象模型9——临时对象的生命周期、模板及实例化分析、内联函数
一.临时对象的生命周期 T c=a+b 假设T是一个类型,那么上述代码执行时,首先会产生一个临时对象用来存放a+b的结果(拷贝初始化临时对象),然后用该临时对象拷贝初始化c,最后临时对象被释放.如果开 ...
- 【C++---16】常指针和常引用
Coordinate coor1(3,5); //定义一个普通对象const Coordinate &coor2 = coor1; //coor2是对象的常引用const Coordinate ...
- 12.4 C++常引用
C++对象常引用 在C++中,常用常指针和常引用作函数参数,既能保证数据安全,使数据不能被随意修改,在调用函数时又不必建立实参的拷贝. 用常指针和常引用作函数参数,可以提高程序运行效率. 在C++中, ...
- C++中的常引用、常对象、常函数、常数据成员
1.常引用 用const声明的引用就是常引用.常引用所引用的对象不能被更改.经常见到的是常引用作为函数的形参,这样不会发生对实参的误修改.常引用的声明形式为:const 类型说明符 &引用名. ...
- 常引用、常对象和对象的常成员
常引用 用const声明的引用就是常引用.常引用所引用的对象不能被更改.我们经常见到的是常引用作为函数的形参,这样不会发生对实参的误修改. 常引用的声明形式为:const 类型说明符 &引用名 ...
- C++学习(六) 常引用、常对象、常对象成员、常成员函数
文章目录 1.常引用 1.1.作用 1.2.说明 二.常对象 2.1.作用 2.2.注意 2.3.说明 三.常对象成员 3.1.作用 3.2.说明 四.常成员函数 4.1.说明 4.2.注意 1.常引 ...
- C++中的常对象与常引用
目录 一.常对象 二.用const修饰的类对象 1.常成员函数 声明 注意 三.常引用 1.声明 2.应该在何时使用: 1.在函数中无需改变其值的参数,应该使用常引用. 2.复制构造函数的参数一般也宜 ...
- java基础,没事常看看(一)类、对象、引用
什么是对象,什么是类? 类:是一个抽象的概念,表示的是一类事物所拥有的共性(属性.方法). 对象:是类的具体(实例),对象不仅拥有类的属性和方法(private除外),还有自己专属的属性与方法. 比如 ...
最新文章
- String、StringBuffer、StringBuilder三者的异同
- 查看详细_丹江口EH油泵入口滤芯W.38.B.0035_滤芯详细查看
- Spring JPA 开启原生sql打印
- Android 2018最新验证手机号正则表达式
- 用Python实现每天向女友表白一次,甜蜜暴击,最后终于被我追到手了!太厉害了!
- hihoCoder 1227 2015 北京网络赛 A题
- 算法(19)-leetcode-剑指offer3
- silverlight 自定义资源整理(待后续补充)
- C 获得程序执行时间
- 教你6步定制你的Ubuntu桌面
- SQLite Tutorial 3 : Working with important SqLite Queries (SELECT, INSERT, DELETE, UPDATE,WHERE...)
- ReentrantLock源码lock和tryLock区别
- 下载《Hadoop权威指南》的气象数据
- JetbrainsCrack-3.1-release-enc.jar 下载
- springboot制作补丁包通用解决方案
- 数据分析三大神器之一:Numpy
- matlab 窄带通,MATLAB 窄带随机过程
- 怎么上传云班课的计算机作业,云班课如何提交课后作业 作业提交教程
- 导数的四则运算法则_浅谈学习高数的导数有关内容
- PC机插入麦克风后没有说话没有声音
热门文章
- django.template.exceptions.TemplateSyntaxError: ‘staticfiles‘ is not a registered tag library. Must
- 代码审计之CVE-2017-6920 Drupal远程代码执行漏洞学习
- 机器学习 -- 用户画像
- Spark 在 Window 环境下的搭建
- 微信小程序侧边栏滑动特效(左右滑动)
- 并发-阻塞队列源码分析
- 微信小程序加载本地图片方法
- Tcl与Design Compiler (十)——其他的时序约束选项(一)
- 设计模式笔记 16. Mediator 中介者模式(行为型模式)
- 51 -算法 -斐波拉奇数列 -LeetCode 70 -递推