C++入门Step09【引用、new和delete】

本文详细介绍了C++中的引用特性,包括引用的声明、初始化和使用注意事项,指出引用是变量的别名,本质是常量指针。此外,还探讨了动态内存管理的new和delete操作,说明了它们在内存生命周期中的作用以及如何使用new和delete创建和释放数组。文章强调了引用在简化编程和提高安全性方面的优势,并对比了引用与指针的区别。
摘要由CSDN通过智能技术生成

引用、new和delete

  1. 引用:是C++对C语言的扩充,故C语言不含 引用

    1. 什么是引用:变量的引用就是该变量的别名,变量和变量的的引用代表同一个变量,引用可多层嵌套

      int a = 5;	//定义整型变量a,并赋值为5
      int& b = a;	//定义整型引用b,来引用a
      int* p = &a;	//定义整型指针p,存储a的地址
      
      /*区分取地址符与引用
      引用: 紧跟在数据类型后;
      取地址符: 除上
      */
      
    2. 引用的注意事项:

      1. 不可单独存在,只有声明,没有定义,其必须依靠变量存在;不可先声明引用而不引用任何变量,这与指针是完全不同的

        int& b;	//事先声明定义一个引用是错误的
        
      2. 声明一个引用时,必须同时对其初始化,即声明该引用代表哪一个变量;但有一种特殊情况例外:【当某个变量的引用作为函数形参时】此时,形参不必在声明中初始化,他的初始化是在函数调用时的虚实结合实现的,即作为形参的引用是实参的别名,例:

        void swap(int& a, int& b);
        
      3. 声明一个引用后,不能再让其作为另一个变量的引用了。例如:

        int a1 = 2, a2 = 5;
        int& b = a1; //正确
        int& b = a2; //错误
        
      4. 不能建立引用数组,例如:

        int a[5] = {0};
        int& b[5] = a; //错误
        int& c = a[0]; //正确(C++新标准支持)
        
      5. 可以建立引用的引用(C++新标准支持),也可以建立引用的指针,例如:

        int a = 3;
        int& b = a; //正确
        int& c = b; //正确
        int* p = &b; //正确,得到的是变量a的地址
        *p = 5;
        c = 6;
        
    3. 引用与指针联系:

      关于引用的性质,如果在程序中声明了b是变量a的引用,实际上在内存中为b开辟了一个指针型的存储单元,在其中存放变量a的地址,输出引用b时,就输出b所指向的变量a的值,相当于输出*b。引用其实就是一个指针常量,他的指向不能改变,只能指向一个指定的变量。所以,引用的本质还是指针,所有引用的功能都可以由指针实现。C++之所以增加引用的机制,是为了方便用户,用户可以不必具体去处理地址,而把引用作为变量的“别名”来理解和使用,而把地址的细节隐藏起来,来降低操作难度和程序安全性。

  2. 使用new和delete动态分配内存:

    1. 作用:当我们需要函数返回超过函数作用域的值时,局部变量无法保证安全性,且是错误的

    2. 生命周期:

      1. C++ 中的 new操作符 和C语言中的 malloc 函数类似,如果不主动 delete 掉这段申请的内存的话,它会一直存在,直到进程结束后系统会回收掉这段资源
      2. 如果delete掉这段申请的内存,则这段申请到的内存的生命周期为从new(申请一段内存)到delete(释放掉这段内存)这段时间
    3. 使用方法:

      int* p = (int*)malloc(sizeof(int)); //C语言中使用 malloc 来申请一个int类型变量的内存
      *p = 5;
      free(p);
      
      int* p = new int(5); //C++ 中使用 new 来申请一个int类型变量的内存
      delete p; //删除变量
      
      int* p = new int[5]; //使用new申请一个包含5个int元素的数组
      delete [] p; //删除数组
      

      还有一个更重要的new优于malloc的地方,C++中的类class,用new申请一个类对象的时候,对象申请成功之后会默认调用其构造函数,而C语言中的malloc只是会申请空间,但是不会调用对象的构造函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值