构造函数用于初始化对象,析构函数用于清理资源。构造函数与类同名,无返回类型,可重载;析构函数在类名前加~,无参无返回值,自动调用。若未定义,编译器生成默认版本;一旦定义则不生成默认构造函数。使用初始化列表可提高成员初始化效率。析构函数在对象销毁时自动调用,动态内存管理中必须自定义以避免泄漏。例如String类中构造函数分配内存,析构函数释放内存,确保资源安全。正确使用构造与析构函数是C++面向对象编程的基础。

在C++中,构造函数和析构函数是类的重要组成部分,它们用于对象的初始化和清理工作。编译器会自动调用这些函数,无需手动显式调用(除非特殊情况),理解它们的语法和使用方式对掌握面向对象编程至关重要。
构造函数的语法与使用
构造函数是一种特殊的成员函数,名字与类名相同,没有返回类型(连void也不写),在创建对象时自动调用。
基本语法:
class MyClass {public:
MyClass() { // 无参构造函数
// 初始化代码
}
MyClass(int value) { // 带参构造函数
data = value;
}
private:
int data;
};
使用示例:
立即学习“C++免费学习笔记(深入)”;
- MyClass obj1; // 调用无参构造函数
- MyClass obj2(100); // 调用带参构造函数
如果类中没有定义任何构造函数,C++会自动生成一个默认的无参构造函数。一旦定义了构造函数,编译器就不会再生成默认版本。
还可以使用初始化列表来更高效地初始化成员变量:
MyClass(int value) : data(value) {// 构造函数体
}
析构函数的语法与使用
析构函数在对象生命周期结束时自动调用,用于释放资源,如内存、文件句柄等。函数名是在类名前加“~”,无参数、无返回值。
基本语法:
class MyClass {public:
~MyClass() {
// 清理代码,例如释放动态内存
}
};
调用时机:
- 局部对象在离开作用域时调用析构函数
- 动态创建的对象在调用delete时触发析构
- 全局或静态对象在程序结束时调用
若未定义析构函数,编译器会生成一个默认的空析构函数。当类中涉及动态内存分配时,必须自定义析构函数以避免内存泄漏。
常见使用场景示例
下面是一个包含动态内存管理的类,展示构造函数和析构函数的实际用法:
class String {private:
char* str;
public:
String(const char* s) {
if (s) {
str = new char[strlen(s) + 1];
strcpy(str, s);
} else {
str = new char[1];
str[0] = '\0';
}
}
~String() {
delete[] str; // 释放内存
}
};
在这个例子中,构造函数负责分配内存并复制字符串内容,析构函数负责释放该内存,防止资源泄漏。
基本上就这些。构造函数确保对象正确初始化,析构函数确保资源被妥善清理。正确使用它们是编写安全、稳定C++程序的基础。










