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有以下常用函数:
- 创建对象
Packet *p = new Packet(100);
Ptr<Packet> ptr = Create<Packet>(100);
- 赋值操作
Packet *p = new Packet();
Ptr<Packet> ptr = p;
- 比较运算
if(ptr == p){}
if(ptr1 != ptr2){}
- 流
std::cout << "address: " << ptr << std::end;
- 浅拷贝
Ptr<Packet> ptr2(ptr1);
- 深拷贝
Ptr<Packet> ptr2 = Copy(ptr1);
- 类型转换
ns-3封装了C++标准库的类型转换函数DynamicCast、StaticCast、ConstCast
标签:count,Ptr,void,Packet,Day,ns,ptr From: https://www.cnblogs.com/leewaytang/p/17035540.html