和结构体一样,一个类的对象也可以以值,指针或者引用的形式作为函数的参数或返回值。一般情况下,为了避免创建临时对象通常传对象的引用,并且为了避免在函数体内修改对象的值,通常使用常引用:

  const Point middle (const Point& p1, const Point& p2) ;

  如果函数以传值形式返回一个类的对象,编译器会创建一个临时对象来保存这个值。但有些编译器会做优化。

用一个简单例子来说明临时变量:


同理,临时对象:

用下例来说明常引用:



浅拷贝:

  可以把一个对象赋值给另外一个对象,对象的每个成员的值,将一对一的拷贝到新的对象。这种拷贝叫浅拷贝,或逻辑拷贝。但是,如果对象含有指针成员变量,而指针变量又指向堆上空间,将只拷贝指针成员变量本身的值,造成两个对象的指针指向同一块堆上的内存空间,删除对象时将造成二次删除。

首先看一个正常运行的程序:

对指针变量浅拷贝后程序奔溃:

附侯捷老师《面向对象高级开发》相关内容讲义图:


续:C++之一个函数链的简单例子(分文件实现)

C++之临时对象、常引用和浅拷贝探究相关推荐

  1. c++ 返回对象的引用要小心

    除非能保证返回对象的生命周期足够长. 一定不要返回临时对象的引用.

  2. C++对象模型9——临时对象的生命周期、模板及实例化分析、内联函数

    一.临时对象的生命周期 T c=a+b 假设T是一个类型,那么上述代码执行时,首先会产生一个临时对象用来存放a+b的结果(拷贝初始化临时对象),然后用该临时对象拷贝初始化c,最后临时对象被释放.如果开 ...

  3. 【C++---16】常指针和常引用

    Coordinate coor1(3,5); //定义一个普通对象const Coordinate &coor2 = coor1; //coor2是对象的常引用const Coordinate ...

  4. 12.4 C++常引用

    C++对象常引用 在C++中,常用常指针和常引用作函数参数,既能保证数据安全,使数据不能被随意修改,在调用函数时又不必建立实参的拷贝. 用常指针和常引用作函数参数,可以提高程序运行效率. 在C++中, ...

  5. C++中的常引用、常对象、常函数、常数据成员

    1.常引用 用const声明的引用就是常引用.常引用所引用的对象不能被更改.经常见到的是常引用作为函数的形参,这样不会发生对实参的误修改.常引用的声明形式为:const 类型说明符 &引用名. ...

  6. 常引用、常对象和对象的常成员

    常引用 用const声明的引用就是常引用.常引用所引用的对象不能被更改.我们经常见到的是常引用作为函数的形参,这样不会发生对实参的误修改. 常引用的声明形式为:const 类型说明符 &引用名 ...

  7. C++学习(六) 常引用、常对象、常对象成员、常成员函数

    文章目录 1.常引用 1.1.作用 1.2.说明 二.常对象 2.1.作用 2.2.注意 2.3.说明 三.常对象成员 3.1.作用 3.2.说明 四.常成员函数 4.1.说明 4.2.注意 1.常引 ...

  8. C++中的常对象与常引用

    目录 一.常对象 二.用const修饰的类对象 1.常成员函数 声明 注意 三.常引用 1.声明 2.应该在何时使用: 1.在函数中无需改变其值的参数,应该使用常引用. 2.复制构造函数的参数一般也宜 ...

  9. java基础,没事常看看(一)类、对象、引用

    什么是对象,什么是类? 类:是一个抽象的概念,表示的是一类事物所拥有的共性(属性.方法). 对象:是类的具体(实例),对象不仅拥有类的属性和方法(private除外),还有自己专属的属性与方法. 比如 ...

最新文章

  1. String、StringBuffer、StringBuilder三者的异同
  2. 查看详细_丹江口EH油泵入口滤芯W.38.B.0035_滤芯详细查看
  3. Spring JPA 开启原生sql打印
  4. Android 2018最新验证手机号正则表达式
  5. 用Python实现每天向女友表白一次,甜蜜暴击,最后终于被我追到手了!太厉害了!
  6. hihoCoder 1227 2015 北京网络赛 A题
  7. 算法(19)-leetcode-剑指offer3
  8. silverlight 自定义资源整理(待后续补充)
  9. C 获得程序执行时间
  10. 教你6步定制你的Ubuntu桌面
  11. SQLite Tutorial 3 : Working with important SqLite Queries (SELECT, INSERT, DELETE, UPDATE,WHERE...)
  12. ReentrantLock源码lock和tryLock区别
  13. 下载《Hadoop权威指南》的气象数据
  14. JetbrainsCrack-3.1-release-enc.jar 下载
  15. springboot制作补丁包通用解决方案
  16. 数据分析三大神器之一:Numpy
  17. matlab 窄带通,MATLAB 窄带随机过程
  18. 怎么上传云班课的计算机作业,云班课如何提交课后作业 作业提交教程
  19. 导数的四则运算法则_浅谈学习高数的导数有关内容
  20. PC机插入麦克风后没有说话没有声音

热门文章

  1. django.template.exceptions.TemplateSyntaxError: ‘staticfiles‘ is not a registered tag library. Must
  2. 代码审计之CVE-2017-6920 Drupal远程代码执行漏洞学习
  3. 机器学习 -- 用户画像
  4. Spark 在 Window 环境下的搭建
  5. 微信小程序侧边栏滑动特效(左右滑动)
  6. 并发-阻塞队列源码分析
  7. 微信小程序加载本地图片方法
  8. Tcl与Design Compiler (十)——其他的时序约束选项(一)
  9. 设计模式笔记 16. Mediator 中介者模式(行为型模式)
  10. 51 -算法 -斐波拉奇数列 -LeetCode 70 -递推