zoukankan      html  css  js  c++  java
  • 按值传递对象和按址传递对象

    演示程序

     1 #include <iostream>
     2 using namespace std;
     3 class A
     4 {
     5 public:
     6     A(){cout<<"执行构造函数创建一个对象
    ";}
     7     A(A&){cout<<"执行复制构造函数创建该对象的副本
    ";}
     8     ~A(){cout<<"执行析构函数删除该对象
    ";}
     9 };
    10 A func(A one)
    11 {
    12     return one;//func函数的返回值是类A的一个对象
    13 }
    14 int main()
    15 {
    16     A a;//执行第一次构造函数-->执行构造函数创建一个对象
    17     func(a);//跳转到函数定义处,执行两次复制构造函数-->第一次,传递参数,第二次,返回参数
    18     //func函数调用完毕,执行析构函数释放掉func函数内存,又因为返回值也会被释放,所以在此调用析构函数释放
    19     return 0;//main函数结束,调用析构函数释放对象a
    20 }

     结果:

    修改,改为按址传递对象

     1 #include <iostream>
     2 using namespace std;
     3 class A
     4 {
     5 public:
     6     A(){cout<<"执行构造函数创建一个对象
    ";}
     7     A(A&){cout<<"执行复制构造函数创建该对象的副本
    ";}
     8     ~A(){cout<<"执行析构函数删除该对象
    ";}
     9 };
    10 A* func(A *one)
    11 {
    12     return one;//func函数的返回值是类A的一个对象,-->现在返回了一个对象地址
    13 }
    14 int main()
    15 {
    16     A a;
    17     func(&a);//运用按址传递传递参数的地址来减少复制构造函数的使用
    18     return 0;//main函数结束,调用析构函数释放对象a
    19 }

    结果

    证明按址传递比按值传递对象要节约资源得多

  • 相关阅读:
    05、汇编语言--环境搭建
    04、计算机基础--编码
    03、计算机基础--数制
    02、计算机基础--8086处理器
    01、计算机基础--计算机概述
    06、JavaEE--SpringMVC
    04、Android系统--Android10
    03、Android系统--Android4.4
    App自动化测试工具Uiautomator2
    Python yaml文件读写
  • 原文地址:https://www.cnblogs.com/table/p/4694145.html
Copyright © 2011-2022 走看看