鱼C论坛

 找回密码
 立即注册
查看: 198|回复: 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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

带有析构函数的Person类示例


  1. #include <iostream>

  2. using namespace std;

  3. class Person {
  4. public:
  5.     int age;
  6.     int* p;

  7.     // 构造函数
  8.     Person(int a) {
  9.         age = a;
  10.         p = new int(a); // 动态分配内存
  11.     }

  12.     // 析构函数:使用~开头,不能有参数
  13.     ~Person() {
  14.         cout << "调用析构函数" << endl;
  15.         delete p; // 释放动态分配的内存
  16.     }
  17. };

  18. int main() {
  19.     Person* xiaoming = new Person(25);
  20.     cout << "xiaoming 的年龄是: " << xiaoming->age << endl;
  21.     cout << "xiaoming 的动态分配的内存值是: " << *(xiaoming->p) << endl;
  22.    
  23.     // 释放对象
  24.     delete xiaoming; // 析构函数将在这里被调用

  25.     return 0;
  26. }
复制代码


如果有更多问题或需要进一步解释,请随时提出!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-10 00:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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