日志13
构析函数,分为构造函数和析构函数,是 C++ 中用于管理对象生命周期的重要机制。以下是它们的定义和使用说明:
1. 构造函数 (Constructor)
定义:
- 作用:在创建对象时自动调用,用于初始化对象。
- 特点:名称与类名相同。没有返回值(甚至不能写 void)。可以被重载(通过参数列表区分)。支持默认参数。
示例代码:
#include <iostream> using namespace std; class MyClass { public: int value; // 构造函数 MyClass(int v) { value = v; cout << "Constructor called, value = " << value << endl; } }; int main() { MyClass obj(10); // 自动调用构造函数 return 0; }
注意:
- 如果用户未显式定义构造函数,C++ 提供一个默认构造函数(无参数,什么都不做)。
- 当有多个构造函数时,称为构造函数的重载。
2. 析构函数 (Destructor)
定义:
- 作用:在对象生命周期结束时自动调用,用于清理资源(如内存释放、文件关闭等)。
- 特点:名称为类名前加 ~。没有参数,也不能被重载。没有返回值。
示例代码:
#include <iostream> using namespace std; class MyClass { public: int value; // 构造函数 MyClass(int v) : value(v) { cout << "Constructor called, value = " << value << endl; } // 析构函数 ~MyClass() { cout << "Destructor called, value = " << value << endl; } }; int main() { MyClass obj(20); // 构造函数自动调用 // 程序结束时,析构函数自动调用 return 0; }
注意:
- 析构函数常用于释放动态分配的资源,避免内存泄漏。
- 析构函数的调用顺序与构造函数的调用顺序相反(后构造的对象先析构)。
3. 构析函数的结合使用
当类中涉及动态分配资源时,构析函数尤为重要。
示例代码:
#include <iostream> using namespace std; class MyClass { private: int* ptr; public: // 构造函数 MyClass(int v) { ptr = new int(v); // 动态分配内存 cout << "Constructor: allocated memory for " << *ptr << endl; } // 析构函数 ~MyClass() { delete ptr; // 释放内存 cout << "Destructor: memory released" << endl; } }; int main() { MyClass obj(30); return 0; }
输出:
Constructor: allocated memory for 30 Destructor: memory released
小结:
- 构造函数负责初始化,析构函数负责清理资源。
- 动态资源管理时,析构函数是保证程序安全性的关键。