C++从入门到放弃
析构函数
- 析构函数语法形式
class 类名{
~类名(void){
析构函数函数体,主要负责处理对象生命周期中动态资源
}
};
- 析构函数的注意事项
- 函数名必须是
~类名
- 析构函数没有返回值,也没有参数表,不可以重载
- 析构函数不能被重载,一个类中只能有一个析构函数
- 析构函数的调用时机
当对象被销毁时,析构函数会自动被调用和执行
1> 对于一个栈对象时其作用域的又花括号}
来调用析构函数,即占内存销毁时机为离开所在作用域时
2> 对于一个堆对象,是执行delete
语句时被delete
操作符来调用析构函数
3>delete
对象时,会自动调用析构函数,再释放对象自身的内存; 而如果是free
函数只会释放对象自身的内存 - 缺省的析构函数
如果类中没有定义析构函数,那么编译器会提供一个缺省的析构函数
1> 对于基本类型的成员变量
什么也没做
2> 对于类类型的成员变量
(成员子对象)将会自动调用相应类的析构函数 - 关于对象的创建和销毁过程
1> 创建
先为对象分配内存
根据声明顺序构造成员子对象(类类型的成员变量)
执行构造函数代码
2> 销毁
先执行析构函数代码
按照声明的逆序析构成员子对象(类类型的成员变量)
释放内存