深拷贝与浅拷贝的核心区别在于是否复制指针指向的堆内存:浅拷贝仅复制指针值,导致多个对象共享同一内存,易引发悬空指针和重复释放;深拷贝则为指针成员重新分配堆内存并复制内容,确保资源独立。

深拷贝和浅拷贝的核心区别在于:浅拷贝只复制对象的值(包括指针的值),不复制指针指向的内容;深拷贝不仅复制对象本身,还为指针成员在堆上重新分配内存,并复制其指向的数据。
浅拷贝:默认行为,容易引发悬空指针和重复释放
编译器自动生成的拷贝构造函数和赋值运算符执行的是浅拷贝。对内置类型(如 int、double)没问题,但遇到指针成员时会出问题:
- 两个对象的指针成员指向同一块堆内存
- 当其中一个对象析构时 delete 了该内存,另一个对象的指针就变成悬空指针
- 若第二个对象也析构并再次 delete,程序崩溃(double free)
例如:class String { char* data; }; ——默认拷贝后,两个 String 对象的 data 指向同一字符串内存。
深拷贝:手动实现,确保资源独立
需要显式定义拷贝构造函数和赋值运算符(遵循“三法则”或 C++11 后的“五法则”):
立即学习“C++免费学习笔记(深入)”;
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~