zoukankan      html  css  js  c++  java
  • C++引用和指针的区别

    一、引用和指针的定义

      引用:它是给另一个变量取一个别名,不会再次分配空间(可以带来程序的优化)

      指针:它是一个实体,需要分配空间

          引用在定义的时候必须进行初始化,并且空间不能够改变

       指针在定义的时候不一定要初始化,并且指向的空间可变。(注:引用的值不能为NULL)---------->可以带来程序的安全性

       引用访问一个变量是直接访问,而指针访问一个变量是间接访问

    二、C++初始化函数6个默认函数

      1.构造函数

      2.析构函数

      3.拷贝构造函数(当函数参数为对象时候)  ------->浅拷贝   深拷贝

        Text  t1;

        Text t2(t1)

                  Text t2 = t1;

      4.赋值函数 ----------->浅赋值  深赋值

       Text t1;

       Text t2;

       t2 = t1;

      5.Text a;

               Text *b = &a;

       Text*  operator&(){ return this};

      

           6.const Text a  (常对象);

              const Text *b = &a;

       const  Text* operator(){return this};

    三、深拷贝、浅拷贝

      执行过程:调用一次构造函数,一次自定义拷贝构造函数,两次析构函数。两个对象的指针成员所指内存不同。

      浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间

      深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。

    Student::Student()
    {
          name = new char(20);
          cout << "Student " << endl;
    }
    
    Student::~Student()
    {
             cout << "~Student " << (int)name << endl;
             delete name;
             name = NULL;
    }
    
    Student::Student(const Student &s)
    {
             name = new char(20);
             memcpy(name, s.name, strlen(s.name));
             cout << "copy Student " << endl;
    }

    int main()
    {
      Student A ;
      Student B = A;(如果里面没有多余的拷贝出一份内存就是浅拷贝,如果有就是深拷贝)
      return 0;
    }
  • 相关阅读:
    网络编程基础
    Unicode 和 UTF-8 有什么区别?
    IDEA中全局搜索只展示100条结果的问题
    MySql实现无则插入有则更新的解决方案
    总是报Expected indentation of 0 spaces but found 2如何解决
    vue Cannot read property 'get' of undefined
    mac 下修改 jenkins 端口
    mac 查找被占用的8080端口并关闭
    sql server 常用高级查询sql
    java & spring 注解 备忘
  • 原文地址:https://www.cnblogs.com/liunx1109/p/9589308.html
Copyright © 2011-2022 走看看