c++] 完全找不到unique_ptr在哪调用了已删除的拷贝怎么办.jpg

博客讲述了在编程中忽视拷贝构造函数和赋值操作符重载可能导致的问题,通过一个痛苦的排查过程,作者强调了即使是自信未使用到拷贝,也应确保正确处理深浅拷贝,以防止标准库造成的意外行为。文章提醒开发者养成良好习惯,对于涉及new操作的对象,务必考虑拷贝构造、移动构造和赋值操作的相关实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说结论:不管你有没有用到,哪怕有多自信没有多余复制,也要写一个重载掉默认的拷贝函数,或者删掉拷贝构造函数。“你绝对没用但人家标准库用,一个浅拷贝过去不就完蛋啦”

因为不想再经历这种痛楚,总结一下:硬是没有的话,在这个方面考虑下---拷贝构造-拷贝赋值-移动构造-移动赋值---。保持习惯(不复制多少给它删了),凡是里面出现new了,且哪怕智能指针说会帮你处理qwq

找了半下午,找不到然后下了两个静态分析软件,还硬是找不到。

然后另开一个项目用最简单的代码复现排查,又是半下午,因为出事的地方看起来完全不搭边,这只排查姬完全没出error。

那个error长这样

 经过好像有奇怪xp的变态一样的各种整改,这个error有好多种变体,建议看输出那里的日志

注释掉排查也不好使,可能我设计的不够好,一个地方注释会连带着很多地方都要注释。

不知道内部给我搞什么鬼了,把重载决议学了个底朝天,所有地方都不可能有问题!然后把所有无关的都delete了免得编译器做奇怪的优化,然后侥幸发现了

 瞬间就知道是这浅拷贝的鬼鬼了。然后又找了半天,我没用到这个吧?最后也没找到我哪里做了拷贝,绝对不是我学艺不精啊!肯定是编译器又偷偷背着我拷贝东西!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值