鱼C论坛

 找回密码
 立即注册
查看: 140|回复: 1

[技术交流] 面向对象-析构函数

[复制链接]
发表于 2025-2-23 23:29:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-2-23 23:29:45 | 显示全部楼层
你提供的代码中存在一些问题,以下是经过修正和完整的析构函数例子:

带有析构函数的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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-3-31 07:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表