程序员面试金典: 9.13 C和C++ 13.4深拷贝和浅拷贝之间有何区别?请说明两者的用法。
2017-01-13 15:36
260 查看
/* 问题:深拷贝和浅拷贝之间有何区别?请说明两者的用法。 分析:深拷贝是拷贝整个对象的状态,包括成员变量的值。 浅拷贝只是将对象的地址赋值给另一个对象。 关键: 1 浅拷贝只考虑对象的所有成员的值。 深拷贝考虑对象成员值+指针对象。这里拷贝指针对象意思就是对指针对象所指向的内容进行赋值。 浅拷贝带来编译运行错误,用于传递复杂结构,注意销毁对象。 2 深拷贝对指针会重新分配内存空间,浅拷贝对指针仅仅赋值,浅拷贝中指针指向一个地方,因此如果释放指针对象时,浅拷贝会释放两次, 造成内存泄漏或者崩溃 3 其一,浅拷贝只是拷贝了指针,使得两个指针指向同一个地址,这样在对象块结束,调用函数析构的时,会造成同一份资源析构2次,即delete同一块内存2次,造成程序崩溃。 其二,浅拷贝使得obj.m_data和obj1.m_data指向同一块内存,任何一方的变动都会影响到另一方。 */ #include <iostream> #include <stdio.h> using namespace std; struct Test { char* ptr; }; void shallowCopy(Test& src, Test& dst) { dst.ptr = src.ptr;//浅拷贝仅仅只是成员变量复制,对于指针,这种做法会失效 } void deepCopy(Test& src , Test& dst) { dst.ptr = (char*) malloc( strlen(src.ptr) + 1 ); strcpy(dst.ptr , src.ptr); } void process() { Test shallowDst, deepDst, src; src.ptr = (char *) malloc( 10 ); strcpy(src.ptr, "abcde"); shallowCopy(src , shallowDst); cout << shallowDst.ptr << endl; deepCopy(src , deepDst); cout << deepDst.ptr << endl; free(src.ptr); free(deepDst.ptr); } int main(int argc, char* argv[]) { process(); getchar(); return 0; }
相关文章推荐
- 深拷贝和浅拷贝之间有何区别?请说明两者的用法
- C++中static_cast、const_cast、reinterpret_cast的用法举例,附带举例说明强制类型转换时int和int&的区别
- C++中浅拷贝与深拷贝之间的区别
- 浅谈C++中指针和引用的区别 指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法。 1.指针和引用的定义和性质区别: (1)指针:指针是一
- 程序员面试金典: 9.13 C和C++ 13.7编写方法,传入参数为指向Node结构的指针,返回传入数据结构的完整拷贝。
- C++中static_cast、const_cast、reinterpret_cast的用法举例,附带举例说明强制类型转换时int和int&的区别
- 举例说明left/right/inner join之间的区别
- GROUP BY,WHERE,HAVING之间的区别和用法
- WHERE,HAVING之间的区别和用法
- UNION 和UNION ALL两者之间的内在区别
- GROUP BY,WHERE,HAVING之间的区别和用法
- 深拷贝和浅拷贝之间的区别
- C++ Template在g++ 4.1和vc8/9之间的一些区别----强悍的VC
- Decorator与Bridge模式的说明与两者的区别
- C++局部类和C++嵌套类之间的区别
- 【转】typedef struct 用法详解及其在c与c++中的区别
- C与C++之间的区别总结
- C,与C++的static的几大用法以及区别。
- ActionMessage、ActionMessages、saveMessages()、saveErrors()、之间的用法和区别
- GROUP BY,WHERE,HAVING之间的区别和用法