本篇文章属于笔者从iOS开发业务扩展到C++业务后,梳理出来的几个关键问题。笔者觉得如果你能搞透这几个问题,那么C++业务上手应该不成问题,要想更进一步,接下来更需要注意的是设计模式和各种细节。
1. 调用方式那么原始?
:: 静态方法
. 堆对象
-> 栈对象/指针
2. PB赋值方式如此混乱
(1)PB生成不支持默认 get/set
dsl_render_ 和 dsl_render()
(2)整体赋值的奇葩写法
showInfo->mutable_dsl_render()->CopyFrom(xxx)
给PB字段赋值:ctrlInfo.mutable_ctrl_info()->CopyFrom(*ctrlInfoPB);
获取mutable之后,然后调用CopyFrom。
C++这3句很重要:
// 将 ctrlInfoPB 的内容复制到 ctrlInfo 的 ctrl_info 成员
ctrlInfo.mutable_ctrl_info()->CopyFrom(*ctrlInfoPB);
// 向 infoMap 的 uuid_ctrl_inf_map 成员中添加一个新元素,并返回指向新元素的指针
finder::FinderRedDotUuidCtrlInfo *newElement = infoMap.add_uuid_ctrl_inf_map();
// 将 ctrlInfo 的内容复制到新添加的元素中
newElement->CopyFrom(ctrlInfo);
3. 迭代遍历如此与众不同且不安全
for (const auto &showInfoPtr : ctrlInfoPtr->getShowInfos()) {
}
4. 方法默认是值传递
必须加上 &
5. 没有null,必须默认构建一个空的数据结构
6. 即使是类文件,也没有统一的命名空间,每个方法前面都要写上类名
void FinderRedDotCommonMgr::clearSameRevokeIdCtrlInfo(const std::string &revokeId) {
7. 对智能指针解引用,一定要判空
std::shared_ptr<AffFinderRedDotCtrlInfo> affCtrlInfo = comCtrlInfo->genCtrlInfoPB();
if (affCtrlInfo) {
return *affCtrlInfo;
}
8. 智能指针去指针,和给普通对象穿上智能指针:
(1)隐形匹配init方法:非常容易出问题
std::make_shard
std::make_shard
(2)给智能指针去指针,解引用: *
———>
一周小感悟:
- 架构的作用:
代码拆解和设计:提升编译问题
优化组的protoc解析接口,提供基础工具
- 一件事情,必须要想清楚,再开始做
很多时候有些事情,在当前当下就是想不清楚,搞不透未来可能会遇到什么问题。
但进度就有所停滞,有的时候就会想:要不先做做吧,先做做看,边做边摸索。
之所以出现这种情况,本质上还是认知层级不够导致的,出现这种思维,就基本决定了这项任务的失败。
有点类似于:3线城市摆摊开路边摊,摆摊的人很多时候也不知道自己干的效果会如何,会觉得自己得先干起来。
但这一定程度上是因为他们的认知不够高导致的,如果是我站在他们那个层级,我就会进行一系列的市场调研,计算投资收入和亏损的概率和比率。
那换位思考一下,当下我对一些事情的预判不够精准,不够通透,那本质也是因为我在这个领域上的认知还需要继续提升,
所以:先思考,先摸索,先调研,全部都摸清楚了,再开始行动。