深拷贝与浅拷贝

浅拷贝:仅仅将须要copy的内存空间的首地址赋值一份,粘贴到另外一个指针的内容上,两者在内存上指向的是同一块内存空间c++

深拷贝:从新开辟空间,将另外一个空间的内容赋值的这个空间上,二者的指针是指向不一样的内存空间。
ide

  在C++中,假设咱们定义了一个name的类,用它构造了两个对象obj1 和 obj2函数

若咱们执行 name obj1 = obj2 且没有本身建立一个copy构造函数时,c++编译器会总动调用默认的copy构造函数,此时是浅拷贝,当执行析购函数时会出现错误;指针

如下三个语句:对象

Name obj1("abcdefg");blog

Name obj2(obj1);内存

Name obj3 = obj1;get

分别从建立了两个对象 obj1 和 obj2,而且将他们赋值,他们的赋值操做是属于浅拷贝,让它们的对象中的指针元素指向了同一块内存空间,即浅拷贝,在执行析构函数时第一次obj2的析购就会释放掉其指针指向的两个类所共有的空间,再次执行析购函数时候就会出现非法访问。编译器

解决方法:it

本身编写copy构造函数;

wKioL1fjoZrT0oL_AACD5xum0rA915.png-wh_50

相关文章
相关标签/搜索