本篇文章属于笔者从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(yyy)

std::make_shard(zzz)

(2)给智能指针去指针,解引用: *

———>

一周小感悟:

  1. 架构的作用:
  • 代码拆解和设计:提升编译问题

  • 优化组的protoc解析接口,提供基础工具

  1. 一件事情,必须要想清楚,再开始做

很多时候有些事情,在当前当下就是想不清楚,搞不透未来可能会遇到什么问题。

但进度就有所停滞,有的时候就会想:要不先做做吧,先做做看,边做边摸索。

之所以出现这种情况,本质上还是认知层级不够导致的,出现这种思维,就基本决定了这项任务的失败。

有点类似于:3线城市摆摊开路边摊,摆摊的人很多时候也不知道自己干的效果会如何,会觉得自己得先干起来。

但这一定程度上是因为他们的认知不够高导致的,如果是我站在他们那个层级,我就会进行一系列的市场调研,计算投资收入和亏损的概率和比率。

那换位思考一下,当下我对一些事情的预判不够精准,不够通透,那本质也是因为我在这个领域上的认知还需要继续提升,

所以:先思考,先摸索,先调研,全部都摸清楚了,再开始行动。