以下是基于《开源网络模拟器ns3 架构与实践》的学习笔记
NS3拥有一套自己开发的类似于C++标准库智能指针的机制,就是Ptr智能指针,简称Ptr指针。
构造
Ptr指针由 Ptr 和 SimpleRefCount 两个类模板组成。前者定义了Ptr指针的外部接口,后者是Ptr指针的内部实现。
原理
Ptr指针的使用范式:Ptr<类名> 指针变量名字
可以使用ns3的Create()函数分配内存。主要是让想使用Ptr指针类继承SimpleRefCount,有计数器功能。
使用方法
以Packet类为例
1 初始化
Ptr<Packet> ptr;
Ptr指针在初始化时不用指定NULL;注意:在标准C++库中,初始化指针需要指向NULL。
2 创建对象以及赋值
使用Create()函数创建对象,使用范式为:Create<类名> (该类的构造函数参数列表),并返回该对象的Ptr指针。等号右侧可以是Ptr指针,也可以是原始指针。
Ptr<Packet> ptr = Create<.Packet>(100);
备注:
- Create()函数:主要用于对象模型中的非Object子类;
- CreateObject()函数:用于Object类的子类,大部分C++类是Object类的子类;
3 指针运算
ptr->GetUid();
(*ptr).GetUid();
4 比较运算
if(ptr==ptr_1){}
“==”可以换成“!=”,“<”,“<=”,“>”,“>=”。
5 拷贝
Ptr指针有两种拷贝方式:指针拷贝和对象拷贝。指针拷贝是ns3中常用的拷贝方式。让新生成的Ptr指针指向同一个对象。