首页 > 其他分享 >ns-3_ Day 7

ns-3_ Day 7

时间:2023-01-08 22:01:15浏览次数:22  
标签:count Ptr void Packet Day ns ptr

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

标签:count,Ptr,void,Packet,Day,ns,ptr
From: https://www.cnblogs.com/leewaytang/p/17035540.html

相关文章

  • Go语言学习Day3
    1.go的函数定义格式为函数名,参数列表,返回值列表和函数体。如果函数没有返回值,则返回列表可以省略。函数从第一条语句开始执行,直到执行return语句或者执行函数的最后一条语......
  • Kafka学习笔记(十二):Java Consumer
    JavaConsumerStringboostrapServers="127.0.0.1:9092";StringgroupId="my-second-application";Stringtopic="demo_java";//createconsumerconfigsProp......
  • What is an atomic instruction?
    LINK:https://www.quora.com/What-is-an-atomic-instruction     Thistermisappliedtoinstructionsthatexecutetwoormoreseparateaccessestomemo......
  • Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context(论文和代
         Transformer模型能够学习长范围依赖,但是在语言模型中受到固定长度上下文限制,本文提出了一个新的结构:Transformer-XL。能够学习超过固定长度的依赖,同时保持了......
  • SVG click event Designs
    <!doctypehtml><html><head><metacharset="utf-8"><metaname="viewport"content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,u......
  • Day-2入门
    类的基本定义定义publicclass:类名称和文件名称必须保持一致定义class:类名称可以与文件名不一致定义多个class:在一个*.java文件里可以有多个class定义,编译后会形成不同......
  • Linux DNS服务Bind
    一、环境CentOS7.9BIND9.11.41.BINDhttps://www.isc.org/bind/BIND是BerkeleyInternetNameDomain的简称,是一个开源的DNS服务器。这是一个历史悠久的软件,它诞生......
  • ns-3_ Day 6
    从Node类获取对象除了物理层的Channel,其余几乎所有重要的类都存储在Node对象里,相同Id的对象属于同一节点。例如:Application传输层IpL4Protocol网络层Ipv4、Ipv6链......
  • Java 集合 - Collections 和 Arrays
    Collections介绍Collections是一个操作Set、List和Map等集合的工具类。常用方法1、binarySearch()二分法查找List;2、reverse()循序颠倒list;3、shuffle()......
  • day1算法练习
    题目https://www.nowcoder.com/practice/8c949ea5f36f422594b306a2300315da描述计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以......