吃完饭继续来码字了 C++ 析构函数 传值,this指针

       话说如今我已经习惯了这种生活,之前俺是中午不睡觉会死星人,如今感受不睡觉也就是那样了,准备把本身的时间好好安排一下了,因为我是在培训班,因此天天的时间也很紧的,之前打算天天晚上更新博客的,如今看来实现不了了。我决定在天天中午,回顾前天学习的内容,并巩固上午所学的。我想这应该是我学习效率最高的方法了。在这感谢一下@奋斗的小歌谢谢你的鼓励,我想这将是我之后坚持不下去的动力,我会坚持的不就是6个月吗?加油!!ios

       好了,废话不说了,进入今天的主题吧!c++

        析构函数:就是用来释放对象的。c++中一切都是按对象来讲的,可是对象里面也有成员变量,成员函数之类的,因此析构函数就是来释放对象所占的内存空间的。
ide

        析构函数的特色:无返回值,不能重载,必须公有,不带任何参数
函数

         那么,何时会用到析构函数呢?总结一句话就是对象立刻释放的时候!学习

         一、离开对象的做用域this

         二、 销毁对象spa

         三、删除一个指向对象的时候指针

  

#include <iostream>
using namespace std;

class Test
{
public:
    Test(){cout<<"这是不带参的默认构造函数"<<endl;}
    ~Test(){cout << "这是析构函数"}
};

void main()
{
Test t;
return ;
}
/******************************************/
The output is 
   这是不带参的默认构造函数
   这是析构函数

      浅拷贝:一个类的对象同过赋值操做能够把本身拷贝给相同类的另一个对象。可是这种赋值方式是对象数据成员之间的相互赋值,这可能建立的仅仅是一种物理拷贝对象

    当所拷贝的对象里面包含指针的成员变量的时候,这种浅拷贝会形成二次删除,这是不合法的。因此应当避免这种拷贝
内存

   

class Thing 
{
private:
      int a,b;
      int *p
public:
       Thing ():b(0){a=0,p=&a}
       
};
Thing t1,t2;
t1=t2;

在这个程序段里,我声明了一个类Thing ,里面包含一个指针类型的成员变量,int *p,在接着我把 Thing 类型的 t2 赋值给t1,这个时候就把t2的指针的值付给了t1  ,指针同时指向t2的 成员变量a,在释放内存的时候,先释放t2,再释放t1的时候,发现t1的指针变量所指向的内存已经被释放了,因此就会抛出异常,就是二次删除。

        固然在这个程序中构造方法使用了初始化列表对数据成员进行初始化,比在函数中进行赋值要高效

        在一个类中,访问函数get和print函数一般要做为const成员函数,常成员函数,不能修改为员变量的值。

        this 指针

        每个对象都包含了一个指向自身的指针,称做this指针。他是隐藏的,可是能够在须要的地方显式的调用。

        在用指针的时候要注意操做符的优先级,通常咱们要像(*this)这样用

       this指针的链式表达式:

      

 class Thing
 {
 public:
     Thing & setx(int a )
     {
         (*this).x=a;
         return *this;
     } 
     Thing & sety(int b)
     {
         (*this).y=b;
         return *this;
     }
      Thing & setz(int c)
     {
         (*this).z=c;
         return *this;
     }
 };
Thing thing ;
 thing.setx(1).sety(2).setz(3);
 
 
 /********************************/
 打印输出后会输出Thing的xyz的值:1 2 3

若是把引用去掉会发生怎么样的变化呢?

          去掉引用 函数返回的就是一个临时的对象,他会把 2 3 付给新生成的两个临时对象,因此去掉引用发生的结果不能预测,所以咱们必定要避免这种状况。

           this指针的特色:

         一、this指针由编译器自动在声明类对象是建立(不须要本身定义)

        二、每一个对象或者函数(成员变量,或函数 非static都隐藏了一个this指针)

        三、this指针都保留了指向该对象的地址

        四、当类的非static成员函数访问另外一个非static函数时,编译器会自动将对象的地址传递给内部调用的函数。(就是在一个成员函数内调用另外一个成员函数时,不用管对象的地址)

相关文章
相关标签/搜索