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 }

    结果

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

  • 相关阅读:
    最近几周的总结
    做游戏
    枚举 结构 .....
    抽象类
    面向对象过程
    构造函数 对象关系
    .net 第二周学习
    。net初学
    CSS基本知识点(01)
    C#之ADO.NET基本知识点(01)
  • 原文地址:https://www.cnblogs.com/table/p/4694145.html
Copyright © 2011-2022 走看看