析构函数:
上篇我们讲到构造函数,是从构造函数的使用功能上说的,然而构造函数还有一个功能就是为对象分配储存空间,这在我们初期的学习中并不是重点,但知道构造函数的这一个功能有助于我们学习析构函数。
析构函数执行与构造函数相反的功能:释放分配给对象的空间。
析构函数的特点:
1,析构函数名与类名相同,但函数名前加~。
2,不返回任何值,定义时不说明 返回值,甚至void也不行(和构造函数一样)
3,没有参数,不能重载。
4,撤销对象的时候系统自动调用析构函数(不懂没关系,下面演示)。
class stu{
private:
int a,b;
public:
stu(int i=1,int j=2)//直接在括号里面给形参赋值
{
a=1;
b=2;
}
void addd()
{
cout<<(a+b)<<endl;
}
~stu()
{
cout<<"析构函数已被调用"<<endl;
}
};
int main()
{
stu A;
A.addd();
return 0;
}
3
析构函数已被调用
在return 0上面加一个system(“pause”);
class stu{
private:
int a,b;
public:
stu(int i=1,int j=2)//直接在括号里面给形参赋值
{
a=1;
b=2;
}
void addd()
{
cout<<(a+b)<<endl;
}
~stu()
{
cout<<"析构函数已被调用"<<endl;
}
};
int main()
{
stu A;
A.addd();
system("pause");
return 0;
}
3
~stu()没有被调用,因为运行停止,删除system(“pause”)和return 0;运行结果如下:
3
析构函数已被调用
说明~stu()也不随着return 0;而执行。
回到我们上面所说的
“ 4,撤销对象的时候系统自动调用析构函数(不懂没关系,下面演示)。”
所以,在主函数中,主函数结束,析构函数自动被调用。
其次,还有调用exit函数和另外两种情况也会调用析构函数,这里不一一列出,因为大多数情况下不用,想要了解可以百度“析构函数什么时候被调用”。
另外,说一种析构函数的常用方法:
在类内用new为字符串str动态分配一个储存空间,那么定义析构函数可以这样:
~stu(){
delete str;
}
这样分配的存储空间会随着对象使用结束而释放str分配的空间。
因为我暂时没学好new和delete语句,便不单独写一个程序来介绍这个常用方法,等我学完new如果有必要再写一篇文章说明这种用法,敬请关注。
个人笔记,一起学习,学艺不精,错误请指出,感激不尽。