【C++】深拷贝和浅拷贝
2015-07-23 16:53
267 查看
浅拷贝会将对象所有成员的值拷贝到另一个对象里。
深拷贝除了拷贝所有成员的值,还会进一步拷贝所有指针对象。
/*
* copy.cpp
*
* Created on: 2015?7?23?
* Author: nanzhou
*/
struct Test {
char* ptr;
};
void shadow_copy (Test & src, Test & dest) {
dest.ptr = src.ptr;
}
void deep_copy (Test & src, Test & dest) {
dest.ptr = (char*) malloc(strlen(src.ptr) + 1);
strcpy(dest.ptr, src.ptr);
}
shadow_copy()可能会导致大量编程运行时错误,尤其是在对象创建和销毁时。使用浅拷贝时,必须非常小心,只有当开发人员真正知道自己在做些什么时,方可选用浅拷贝。
多数情况下,使用浅拷贝是为了传递一块复杂结构的信息,但又不想真的复制一份数据。
使用浅拷贝时,销毁对象必须非常小心。
在实际开发中,浅拷贝很少使用。大部分情况都应该使用深拷贝,尤其是当需要拷贝的结构很小时。
深拷贝除了拷贝所有成员的值,还会进一步拷贝所有指针对象。
/*
* copy.cpp
*
* Created on: 2015?7?23?
* Author: nanzhou
*/
struct Test {
char* ptr;
};
void shadow_copy (Test & src, Test & dest) {
dest.ptr = src.ptr;
}
void deep_copy (Test & src, Test & dest) {
dest.ptr = (char*) malloc(strlen(src.ptr) + 1);
strcpy(dest.ptr, src.ptr);
}
shadow_copy()可能会导致大量编程运行时错误,尤其是在对象创建和销毁时。使用浅拷贝时,必须非常小心,只有当开发人员真正知道自己在做些什么时,方可选用浅拷贝。
多数情况下,使用浅拷贝是为了传递一块复杂结构的信息,但又不想真的复制一份数据。
使用浅拷贝时,销毁对象必须非常小心。
在实际开发中,浅拷贝很少使用。大部分情况都应该使用深拷贝,尤其是当需要拷贝的结构很小时。
相关文章推荐
- Online Judge System For SzNOI 题库 语法百题 C++ d014
- Online Judge System For SzNOI 题库 语法百题 C++ d013
- C++中static用法总结
- Onilne Judge System For SzNOI 题库 语法百题 C++ d012
- 【C语言】关于atoi,itoa与itob的重写和字符统计
- Online Judge System For SzNOI 题库 语法百题 C++ d011
- C++宽字符串转字符串
- UVa10305拓扑排序入门题 可做模板用
- C++ base64 编解码
- C++ 之Socket 编程 send rev 阻塞设置 阻塞超时时间
- C++ string容器类实现
- c++对象模型
- 栈帧详解
- 读书笔记MoreEffectiveC++(7)
- C语言--指针
- C++中的指针和引用
- HDU 1421 搬寝室
- 【C++】用C++写个方法,打印输入文件的最后K行
- 读书笔记MoreEffectiveC++(6)
- C++ auto 与 register、static 关键字 浅析