ns-3_ Day 7

Ptr:ns-3的智能指针

Ptr的实现分为两个部分:

  • Ptr类:负责保存原始指针和模拟原始指针操作(复制、赋值等);
  • SimpleRefCount类:负责记录所有指向所分配的对象内存的指针数量。

简化两个类的定义,可以分别视为

template<typename T>
class Ptr{
private:
T *m_ptr;
};
template<typename T, typename PARENT = empty, typename DELETER = DefaultDeleter<T>>
class SimpleRefCount : public PARENT{
public:
inline void Ref(void) const{
m_count++;
}
inline void Unref(void) const{
m_count--;
if(m_count==0){
DELETER::Delete(...);
}
}
private:
mutable uint32_t m_count;
};

完整的实现中,Ptr类还有一系列成员函数和重载运算符来模拟指针操作,这些操作会调用对象的Ref和Unref来管理计数。容易想到,这样做的前提是Ptr的模板里的类一定是SimpleRefCount的派生类。
Ptr有以下常用函数:

  1. 创建对象
Packet *p = new Packet(100);
Ptr<Packet> ptr = Create<Packet>(100);
  1. 赋值操作
Packet *p = new Packet();
Ptr<Packet> ptr = p;
  1. 比较运算
if(ptr == p){}
if(ptr1 != ptr2){}
std::cout << "address: " << ptr << std::end;
  1. 浅拷贝
Ptr<Packet> ptr2(ptr1);
  1. 深拷贝
Ptr<Packet> ptr2 = Copy(ptr1);
  1. 类型转换

ns-3封装了C++标准库的类型转换函数DynamicCast、StaticCast、ConstCast

posted on   LeewayTang  阅读(64)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示