C++问题:深拷贝和浅拷贝
什么是拷贝构造函数:
拷贝构造、赋值运算符:
用一个对象初始化一个新的对象,拷贝构造函数是把对象当作参数传入,利用传入的对象生成一个新的对象,赋值运算符是将对象的值赋值给一个已经存在的实例。调用的是拷贝构造函数还是赋值运算符,主要看是否有新的对象产生。
拷贝构造函数语法:className (const className &obj){主体}
使用场景:
使用一个已存在的对象创建一个新的对象
对象作为函数的返回值以值的方式从函数返回
对象作为函数参数,以值传递的方式传给函数
深拷贝与浅拷贝:
对象中含有指针类型的成员变量时需要用深拷贝构造,否则用浅拷贝构造
编译器默认的拷贝构造函数是浅拷贝构造函数,它只会复制一个一模一样的指针,并不会操作指针指向的东西,要实现自己的逻辑需求,就要自定义拷贝构造函数,实现深拷贝
如果对象中含有指针变量却使用了浅拷贝构造,那么会导致两个指针变量指向同一块地址空间,那么在对象释放时会导致一块空间释放两次,编译器报错(二次析构问题)
浅拷贝和深拷贝的区别在于两个指针变量指向的是一块空间还是指向不同的空间,如果没有创建内存的操作就是浅拷贝,否则是深拷贝