您的位置:首页 > 编程语言 > C语言/C++

c++学习笔记 析构函数

2017-03-14 22:59 218 查看
声明:注明代码出处 http://www.weixueyuan.net/view/6345.html

析构函数

在创建对象的时候系统会自动调用构造函数,在对象需要被销毁的时候同样系统会自动调用一个函数

无返回值
没有参数,不能被重载,因此一个类也只能含有一个析构函数
函数名必须为“~类名”的形式,符号“~”与类名之间可以有空格

析构函数与构造函数调用顺序是反转过来的,先调用构造函数的后调用析构函数。

#include<iostream>
using
namespace std;

class
test
{
public:
test(int
i){num
= i;cout<<num<<"
Constructor"<<endl;}
~test(){cout<<num<<"
Destructor"<<endl;}
private:
int num;
};

int
main()
{
test
t0(0);
test
t1(1);
test
t2(2);
test
t3(3);
return
0;
}
程序运行结果:
0  Constructor
1  Constructor
2  Constructor
3  Constructor
3  Destructor
2  Destructor
1  Destructor
0  Destructor

类的构造函数负责对象完成初始化及其它相关操作,而析构函数则用于销毁对象时完成相应的资源释放工作。

注意 动态申请的东西得自己销毁

有new 有delete  特别注意new多个的情况 不然会内存泄漏

#include<iostream>

using namespace std;

class Array

{

public:

    Array(){length = 0; num = NULL;};

    Array(int * A, int n);

    Array(Array &a);//复制构造函数

    void setnum(int value, int index);

    int * getaddress();

    void display();

    int getlength(){return length;}

    ~Array();

private:

    int length;

    int * num;

};

Array::~Array()

{

    if(num != NULL)

        delete[] num;//new了多个 要把它给人工释放

    cout<<"destructor"<<endl;

}

Array::Array(Array & a)

{

    if(a.num != NULL)

    {

        length = a.length;

        num = new int[length];//new了多个

        for(int i=0; i<length; i++)

            num[i] = a.num[i];

    }

    else

    {

        length = 0;

        num = 0;

    }  

}

Array::Array(int *A, int n)

{

    num = new int
;

    length = n;

    for(int i=0; i<n; i++)

        num[i] = A[i];

}

void Array::setnum(int value, int index)

{

    if(index < length)

        num[index] = value;

    else

        cout<<"index out of range!"<<endl;

}

void Array::display()

{

    for(int i=0; i<length; i++)

        cout<<num[i]<<" ";

    cout<<endl;

}

int * Array::getaddress()

{

    return num;

}

int main()

{

    int A[5] = {1,2,3,4,5};

    Array arr1(A, 5);

    arr1.display();

    Array arr2(arr1);

    arr2.display();

    arr2.setnum(8,2);

    arr1.display();

    arr2.display();

    cout<<arr1.getaddress()<<" "<<arr2.getaddress()<<endl;

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言