2017年12月7日,这是我在CSDN写的第一篇博客,写博客的目的也是对我知识进行查漏补缺,把我C++之路遇到的种种问题记录下来,让自己不能反同样的错误。
-------杂谈
浅拷贝和深拷贝
问题:近期在做算法实验的时候碰到一个关于类指针赋值的问题,简单的指针之间的赋值只是把两个指针指向同一个地址,而我需要把每次算法执行完的类指针push_back进vector储存每次算法迭代的结果,如果每次都是存入同一个指针,就会出现vector中的类指针都指向同一个地址,这就让我想到了能不能进行类指针之间的赋值,两个类指针之间内容相同,但是指针指向的地址都不同,就是两个不同的指针。
定义
浅拷贝:按照我的理解就是,两类之间发生数据成员的赋值,如果只是简单数据类型之间的赋值,浅拷贝完全能够胜任,但是碰到有指针的时候,两个类之间浅拷贝,那么两个对象中的指针会指向同一个地址,那么析构函数执行的时候就会发生错误(同一指针释放了两次)。
深拷贝:在浅拷贝的基础上对指针拷贝进行处理,让两个类指针中的指针指向不同的区域,这样两个类指针虽然内容想到,但是是存储在内存的不同区域。
下面是实验的代码
class rect { public: rect(); rect(const rect *r); ~rect(); private: int width, height; int *p; }; rect::rect(const rect *r) { width = r->width; height = r->height; p = new int; *p = *(r->p); } rect::rect() { p = new int(100); } rect::~rect() { if (p != NULL) delete p; } int _tmain(int argc, _TCHAR* argv[]) { rect *rect1; rect *rect2; rect1 = new rect; rect2 = new rect(rect1); return 0; }实验结果:
类指针和类内成员p指针都指向了不同的地址