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;
}

 

posted on 2018-09-04 23:48  zhang11111wei  阅读(193)  评论(0编辑  收藏  举报

导航