在 C++ 中,当类中包含指针成员或动态分配的资源(如 分配的内存、文件句柄等)时,编译器默认生成的浅拷贝(Shallow Copy,只复制指针地址)会导致多个对象指向同一块内存,进而引发重复释放(Double Free)、内存泄漏或数据被意外修改等严重问题。 因此,我们需要实现深拷贝(Deep Copy):为新对象分配独立的内存,并将原对象内存中的数据复制过去。 实现深拷贝的核心是遵循 C++ 的“三法则”(Rule of Three),即如果你需要自定义以下任何一个,你通常需要自定义全部三个: 1. 析构函数(释放资源) 2. 拷贝构造函数(实现深拷贝) 3. 拷贝赋值运算符(实现深拷贝并处理自我赋值) 以下是具体的实现方法和最佳实践: --- 1. 经典实现方法(手动管理内存) 我们以一个包含 指针的类为例: --- 2. 更优雅的实现:“拷贝与交换”惯用法(Copy-and-Swap Idiom) 上面实现的“拷贝赋值运算符”虽然正确,但如果在 时抛出异常,会导致当前对象的 变成野指针。 为了保证强异常安全性,C++ 推荐使用 Copy-and-Swap 惯用法来实现拷贝...