| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 搜狗workflow——C++并行计算与异步网络引擎 序列化与反序列化 代码分析(四) -> 正文阅读 |
|
[C++知识库]搜狗workflow——C++并行计算与异步网络引擎 序列化与反序列化 代码分析(四) |
2021SC@SDUSC 目录 一.基础知识1.万能的指针:void * 我们可以认为 2.this到底是什么 this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this。不过 this 这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。 3.二级指针**--指向指针的指针。 4.msg类型 可以在任意的package中自定义msg类型; 要使用自定义的消息类型必须source自定义消息所在的工作空间,否则rosmsg show test_msgs/Test和rostopic echo /test_msg(/test_msg是节点中使用自定义消息类型test_msgs/Test的topic)都会报错,因为没有source的情况下自定义消息类型是不可见的,被认为是未定义类型 一种典型的错误是删掉工作空间下的devel和build文件夹之后重新编译代码,此时由于没有source自定义消息所在的工作空间,即使使用自定义消息的代码和自定义消息在同一个包也无法找到,该消息头文件,此时需要运行source devel/setup.bash之后重新编译就好。 5.free()函数 free()函数一般是和malloc()对应使用。malloc用来申请内存,而free用来释放内存。 1)free只是释放了malloc所申请的内存,并不改变指针的值;free的是vert_x所指向地址的内存。free只是释放了指针所指向地址的空间,本质上就是做了一些标记而已,所以指针及空间内容都还是存在的,只不过有隐患罢了。 2)free(vert_x)释放了vert_x指示的内存空间,vert_x这个指针变量本身仍然存在。这就是悬垂指针问题 3)由于指针所指向的内存已经被释放,所以其它代码有机会改写其中的内容,相当于该指针从此指向了自己无法控制的地方,也称为野指针; 6.Using用法 1.命名空间的使用 2.在子类中引用基类的成员 3、别名指定 二.代码分析namespace protocol { class TutorialMessage : public ProtocolMessage { private: virtual int encode(struct iovec vectors[], int max); virtual int append(const void *buf, size_t size); //定义encode和append方法实现序列化和反序列化。 public: int set_message_body(const void *body, size_t size); void get_message_body_nocopy(void **body, size_t *size) { *body = this->body; *size = this->body_size; } //定义二级指针**body;*body指向body的地址,*size指向body_size的地址。 protected: char head[4]; size_t head_received; char *body; size_t body_received; size_t body_size; //定义变量。 public: TutorialMessage() { this->head_received = 0; this->body = NULL; this->body_size = 0; } //设置head_received的值为0;body的值为空;body_size的值为0。 TutorialMessage(TutorialMessage&& msg); TutorialMessage& operator = (TutorialMessage&& msg); virtual ~TutorialMessage() { free(this->body); } //用free()函数来释放内存。 }; using TutorialRequest = TutorialMessage; using TutorialResponse = TutorialMessage; } //using别名指定。 ------------------------------------------------------------------------------------------------------------------------------- 参考资料: |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:22:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |