• 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;
    }
  • 相关阅读:
    以一道CTF题目看无参数RCE
    浅谈php序列化字符串逃逸问题
    [XCTF 4th] ics-05 复现
    关于Sharp俩打印机AR-1808S和AR-2348SV的共享问题
    关于使用AdventureWorks2008示例数据库之初碰到的问题
    明日科技的SQL Server---6
    ado.net 4 step by step随书数据库
    手欠,大半个下午加一晚上就报销了。
    程序员的SQL金典
    c#读写文件
  • 原文地址:https://www.cnblogs.com/liunx1109/p/9589308.html
Copyright © 2020-2023  润新知