首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络协议 >

RTP库源码中内存储器分配操作 RTPNew 的用法

2013-01-06 
RTP库源码中内存分配操作 RTPNew 的用法本人最近阅读 RTP源代码,对类似以下的语句很不理解RTCPPacket *pp

RTP库源码中内存分配操作 RTPNew 的用法
本人最近阅读 RTP源代码,对类似以下的语句很不理解

RTCPPacket *p;
p = RTPNew(GetMemoryManager(),RTPMEM_TYPE_CLASS_RTCPSRPACKET) RTCPSRPacket(data,length);

我怎么看都觉得参数对应不上,还望明白的人把整句的意思说明下



对new操作符的重载源代码如下
#ifdef RTP_SUPPORT_MEMORYMANAGEMENT

inline void *operator new(size_t numbytes, RTPMemoryManager *mgr, int memtype)
{
if (mgr == 0)
return operator new(numbytes);
return mgr->AllocateBuffer(numbytes,memtype);
}
#define RTPNew(a,b) new(a,b)

#else

#define RTPNew(a,b) new
[解决办法]

引用:
本人最近阅读 RTP源代码,对类似以下的语句很不理解

RTCPPacket *p;
p = RTPNew(GetMemoryManager(),RTPMEM_TYPE_CLASS_RTCPSRPACKET) RTCPSRPacket(data,length);

我怎么看都觉得参数对应不上,还望明白的人把整句的意思说明下


对new操作符的重载源代码如下
#ifdef RTP_SUPPORT_MEMORYMANAGEMENT

inline void *operator new(size_t numbytes, RTPMemoryManager *mgr, int memtype)
{
if (mgr == 0)
return operator new(numbytes);
return mgr->AllocateBuffer(numbytes,memtype);
}
#define RTPNew(a,b) new(a,b)

#else

#define RTPNew(a,b) new


new的第一个大小参数(类型为size_t) 是编译器自己加上去的。new(a,b) T 变成 new(sizeof(T),a,b) T

所以,

RTPNew(GetMemoryManager(),RTPMEM_TYPE_CLASS_RTCPSRPACKET) RTCPSRPacket

相当于

new (GetMemoryManager(),RTPMEM_TYPE_CLASS_RTCPSRPACKET) RTCPSRPacket

相当于

new ( sizeof(RTCPSRPacket), GetMemoryManager(),RTPMEM_TYPE_CLASS_RTCPSRPACKET) RTCPSRPacket


- 千里孤行

热点排行