下面是对这段 C++ 代码的详细解释和注释:
cpp
浅色版本
#include <iostream> // 引入输入输出流库
using namespace std; // 使用标准命名空间,避免每次写 std::
// 定义一个名为 MyClass 的类
class MyClass {
private:
int* datas; // 类的私有成员变量:指向 int 的指针,用于动态分配数组
public:
// 构造函数:接收一个整数 size 作为参数
MyClass(int size) {
datas = new int[size]; // 动态分配一个大小为 size 的整型数组
}
// 析构函数:在对象生命周期结束时自动调用,用于释放资源
~MyClass() {
cout << "析构函数被调用" << endl; // 输出提示信息
delete[] datas; // 释放之前动态分配的数组内存
}
};
// 程序主入口
int main() {
// 创建一个 MyClass 对象 m1,分配大小为 5 的数组
MyClass m1(5); // 栈上创建的对象,超出作用域后会自动调用析构函数
// 在堆上动态创建一个 MyClass 对象 m2,分配大小为 10 的数组
MyClass *m2 = new MyClass(10);
// 手动删除堆上创建的对象 m2,显式调用析构函数并释放内存
delete m2;
// 程序返回 0,表示成功结束
return 0;
}
// 此时 m1 超出作用域,其析构函数将被自动调用
运行结果分析(假设无错误):
浅色版本
析构函数被调用 // 来自 delete m2;
析构函数被调用 // 来自 m1 离开 main 函数作用域
总结说明:
m1
是 栈上 创建的对象,当main()
函数执行完毕后,系统会自动调用它的析构函数。m2
是 堆上 创建的对象,必须手动使用delete
删除,否则会造成内存泄漏。- 每个对象都会在销毁时调用一次析构函数,确保其所占用的动态内存被正确释放。
如果你有任何关于深拷贝、浅拷贝、内存管理或 RAII 等进阶话题的问题,也可以继续问我!