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 2023-01-08 21:53  LeewayTang  阅读(92)  评论(0)    收藏  举报

导航