C++类三剑客:构造、析构与拷贝
C类的默认成员函数构造、析构与拷贝构造函数在C中类有六个默认成员函数编译器自动生成其中构造函数、析构函数和拷贝构造函数是最基础且关键的部分。它们共同管理对象的生命周期和资源安全。1.构造函数 (Constructor)定义在对象创建时自动调用用于初始化成员变量特点函数名与类名相同无返回值类型可重载多个不同参数的构造函数默认构造函数无参数或所有参数有默认值使用场景初始化对象数据成员分配动态内存注意事项若用户未定义编译器生成空实现的默认构造函数成员初始化优先使用初始化列表效率高于构造函数体内赋值class Student { public: // 构造函数使用初始化列表 Student(std::string n, int a) : name(n), age(a) {} // 默认构造函数 Student() : name(Unknown), age(0) {} private: std::string name; int age; };2.析构函数 (Destructor)定义对象销毁时自动调用用于释放资源特点函数名为~类名无参数和返回值不可重载每个类仅有一个析构函数使用场景释放动态内存delete关闭文件/网络连接等资源注意事项若类涉及动态资源管理必须显式定义析构函数基类析构函数应声明为virtual确保多态正确销毁class DataBuffer { public: DataBuffer(size_t size) : buffer(new int[size]) {} // 析构函数释放堆内存 ~DataBuffer() { delete[] buffer; std::cout 资源已释放; } private: int* buffer; };3.拷贝构造函数 (Copy Constructor)定义用同类型对象初始化新对象时调用特点函数签名类名(const 类名 other)参数为常量引用避免无限递归使用场景对象值传递函数传参对象初始化如Student s2 s1;深拷贝 vs 浅拷贝编译器默认生成浅拷贝逐成员复制含指针成员时需自定义深拷贝避免双重释放class String { public: // 拷贝构造函数深拷贝 String(const String other) { size other.size; data new char[size]; // 新开内存 strcpy(data, other.data); // 复制内容 } private: char* data; size_t size; };关键规则总结函数类型触发时机默认行为风险自定义必要性构造函数对象创建基本类型不初始化指针为野指针需初始化非内置类型成员析构函数对象销毁不释放堆内存导致内存泄漏涉及动态资源时必须自定义拷贝构造函数拷贝初始化浅拷贝导致双重释放含指针/资源时需深拷贝实现⚠️重要原则遵循Rule of Three三法则若自定义了析构函数、拷贝构造函数或拷贝赋值运算符之一通常需要同时实现另外两个以保资源安全。通过合理设计这三个函数可确保C对象的创建、复制和销毁过程安全高效避免内存泄漏和未定义行为。