面向对象-析构函数
#include <iostream>using namespace std;
// 析构函数:
// 是对象生命周期的终点,在对象空间被销毁之前调用
// 在析构函数中,一般进行资源的释放,堆内存的销毁
// 不能重载,一个类只能有一个析构函数。
class Person {
public:
int age;
int* p;
// 析构函数:使用~开头,不能有参数
~Person()
{
cout << "Person类的析构函数调用了" << endl;
// 在析构函数中,将类内其它引用的堆空间都释放掉,避免内存泄露
if (p != nullptr)
{
delete p;
p = nullptr;
}
}
};
int main() {
//在堆上创建对象
Person* xiaoming = new Person();
xiaoming->p = new int(10);
int* tmp = xiaoming->p;
//释放堆空间
delete xiaoming; // 手动分配的内存(如:new)需在析构函数中通过 delete 释放
cout << *tmp << endl;
system("pause");
return 0;
} 你提供的代码中存在一些问题,以下是经过修正和完整的析构函数例子:
带有析构函数的Person类示例
#include <iostream>
using namespace std;
class Person {
public:
int age;
int* p;
// 构造函数
Person(int a) {
age = a;
p = new int(a); // 动态分配内存
}
// 析构函数:使用~开头,不能有参数
~Person() {
cout << "调用析构函数" << endl;
delete p; // 释放动态分配的内存
}
};
int main() {
Person* xiaoming = new Person(25);
cout << "xiaoming 的年龄是: " << xiaoming->age << endl;
cout << "xiaoming 的动态分配的内存值是: " << *(xiaoming->p) << endl;
// 释放对象
delete xiaoming; // 析构函数将在这里被调用
return 0;
}
如果有更多问题或需要进一步解释,请随时提出!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]