C++核心成员函数深度解析 C 类和对象默认成员函数详解1.构造函数构造函数在对象创建时自动调用用于初始化成员变量。基本特性与类名同名无返回值类型支持函数重载类型分类默认构造函数无参或所有参数有默认值class Point { public: Point() : x(0), y(0) {} // 默认构造 private: int x, y; };有参构造函数Point(int a, int b) : x(a), y(b) {}初始化列表优先于赋值语句避免额外拷贝开销 $${效率 } \propto \frac{1}{\text{拷贝次数}}$$2.析构函数对象销毁时自动调用用于释放资源命名格式${\sim}ClassName()$无参数无返回值禁止重载示例class Buffer { public: Buffer(size_t sz) { ptr new char[sz]; } ~Buffer() { delete[] ptr; } // 释放动态内存 private: char* ptr; };3.拷贝构造函数用已有对象初始化新对象签名格式$ClassName(const ClassName)$浅拷贝 vs 深拷贝默认浅拷贝逐成员复制需改写为深拷贝处理指针class String { public: String(const String s) { len s.len; data new char[len]; // 深拷贝 memcpy(data, s.data, len); } private: char* data; size_t len; };4.拷贝赋值运算符对象间赋值操作签名格式$ClassName operator(const ClassName)$处理自赋值$if(this \neq rhs)$标准实现String operator(const String rhs) { if (this ! rhs) { delete[] data; // 释放旧资源 len rhs.len; data new char[len]; // 深拷贝 memcpy(data, rhs.data, len); } return *this; // 支持链式赋值 }5.移动语义C11高效转移资源所有权移动构造函数String(String s) noexcept : data(s.data), len(s.len) { s.data nullptr; // 置空防止双重释放 }移动赋值运算符String operator(String rhs) noexcept { if (this ! rhs) { delete[] data; data rhs.data; // 资源转移 len rhs.len; rhs.data nullptr; } return *this; }6. 其他特殊成员函数取址运算符Point* operator() { return this; }const取址运算符const Point* operator() const { return this; }总结默认成员函数核心关系图graph LR A[构造函数] -- B[对象构造] C[析构函数] -- D[资源释放] E[拷贝构造/赋值] -- F[独立副本] G[移动构造/赋值] -- H[资源转移]改写原则RAII资源获取即初始化Rule of Three/Five需同时实现拷贝构造/拷贝赋值/析构函数或扩展移动语义