C++析构函数
析构函数,即当类被释放时调用的函数
析构函数调用
#include <iostream>
using namespace std;class Person
{
public:Person(){cout << "Person constructor" << endl;}~Person(){cout << "Person destructor" << endl;}
};int main()
{//创建对象调用对象构造函数Person p;return 0;
}
//此处超出作用域 对象被自动销毁 调用析构函数
当一个类不手动定义析构函数时,编译器会生成一个默认析构函数
如果类中有new这样动态分配的资源,需要使用析构函数确保这些资源被释放,以防止内存泄漏。
析构函数特点
- 无返回值
- 无参数
- 不可以重载
- 有且只有一个析构函数
- 只针对new 不针对 malloc
- 最大的作用,释放对象内存空间
在使用malloc 分配对象时,使用free释放,不会调用析构函数。通过 new分配对象时,使用delete释放,会调用析构函数
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;class Person
{
public:Person(){cout << "Person constructor" << endl;}~Person(){cout << "Person destructor" << endl;}
};int main()
{Person* p_p = (Person*)malloc(sizeof(Person));free(p_p);//此时不会调用析构函数,堆空间仍然无法释放Person* p = new Person();delete p;//会调用析构函数return 0;
}