C++问题:深拷贝和浅拷贝

什么是拷贝构造函数:

拷贝构造、赋值运算符:

用一个对象初始化一个新的对象,拷贝构造函数是把对象当作参数传入,利用传入的对象生成一个新的对象,赋值运算符是将对象的值赋值给一个已经存在的实例。调用的是拷贝构造函数还是赋值运算符,主要看是否有新的对象产生。

拷贝构造函数语法:className (const className &obj){主体}

使用场景:

使用一个已存在的对象创建一个新的对象

对象作为函数的返回值以值的方式从函数返回

对象作为函数参数,以值传递的方式传给函数

深拷贝与浅拷贝:

对象中含有指针类型的成员变量时需要用深拷贝构造,否则用浅拷贝构造

编译器默认的拷贝构造函数是浅拷贝构造函数,它只会复制一个一模一样的指针,并不会操作指针指向的东西,要实现自己的逻辑需求,就要自定义拷贝构造函数,实现深拷贝

如果对象中含有指针变量却使用了浅拷贝构造,那么会导致两个指针变量指向同一块地址空间,那么在对象释放时会导致一块空间释放两次,编译器报错(二次析构问题)

浅拷贝和深拷贝的区别在于两个指针变量指向的是一块空间还是指向不同的空间,如果没有创建内存的操作就是浅拷贝,否则是深拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值