RTP库源码中内存储器分配操作 RTPNew 的用法
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
[解决办法]
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
- 千里孤行