零基础 C++ 实习 第三周 拷贝构造

背景

在验收了重构的逻辑后,主管提出了新的需求,将运行和写入解耦,利用消息队列来实现多线程加速。

初始

了解需求后,将问题从易到难逐步分解:

  1. 将运行和写入封装成单独函数
  2. 了解消息队列,建立读者写者模型,确定需要的原子操作
  3. 运行,调试,迭代

于是,便开始动手:封装函数,先不考率完善的线程安全,实现了粗糙的读者写者模型。

构建,报错,改,构建报错改...

在经历几个小时后,终于能够运行,但是挂了。

我将自己代入到老练的工程师中,一一排查可能的原因:

  1. 产生竞争(将所有竞争的地方加锁,此间还调出教科书级别的死锁bug)
  2. 引用出现问题,指针出现问题(逐一排查)

苦战了两天,无果。

转机

所幸我是明牌的零基础实习生,主管没有对我的工期有期待,逐步排查可能,最终在写者内部,找到了凶手:

auto deep_result = self_type;

这里self_type是一个非常简单的用来存放数据的结构体,就像算法题中的线段树节点一样。上一位开发者只是最简化的实现了析构解构。而我错误的想要实现深拷贝,在没有显示的构造拷贝函数时,c++会将内部变量都浅拷贝,正巧该结构体中有字符串数字。于是,便出现了两个变量拥有指向相同地方指针,在回收时产生了报错。从结果看,这是非常严重的报错,所幸运行时产生了显示的错误。在实现了个构造拷贝函数后,后续都十分顺利。

复盘

看到这个错误,忽然百感交集,想起了一年前大三找第一份实习时,面试官的提问:你这个怎么没有拷贝构造函数,能不能实现一下。我说不会时,他惊讶的表情仿佛再说:看来你确实不会C++。是的没有拷贝构造,简单a=b也会报错。

#正在实习的碎碎念##实习了我才知道的事#
零基础 c++ 实习 文章被收录于专栏

本栏用于记录一位零基础c++实习工作过程中对c++项目的思考

全部评论

相关推荐

黎明azzz:刘女士吓坏了
点赞 评论 收藏
分享
6 4 评论
分享
牛客网
牛客企业服务