读书人

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

发布时间: 2013-01-06 15:44:48 作者: rapoo

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


- 千里孤行

读书人网 >网络协议

热点推荐