mediaplayer 代码疑问
static IWindow * CWindow_New(int16 nSize, CMediaPlayer * pOwner, VTBL(IWindow) * pvt)
{
CWindow * pme;
VTBL(IWindow) * pVtbl;
pme = MALLOC(nSize + sizeof(VTBL(IWindow)));
if (!pme)
return NULL;
pme->m_pOwner = pOwner;
pme->m_pIShell = pme->m_pOwner->a.m_pIShell;
pme->m_pIDisplay = pme->m_pOwner->a.m_pIDisplay;
pVtbl = (VTBL(IWindow) *)((byte *)pme + nSize);
MEMCPY(pVtbl, pvt, sizeof(VTBL(IWindow)));
INIT_VTBL(pme, IWindow, *pVtbl);
return (IWindow *)pme;
}
为什么不写成
static IWindow * CWindow_New(int16 nSize, CMediaPlayer * pOwner, VTBL(IWindow) * pvt)
{
CWindow * pme;
VTBL(IWindow) * pVtbl;
pme = MALLOC(nSize);
if (!pme)
return NULL;
pme->m_pOwner = pOwner;
pme->m_pIShell = pme->m_pOwner->a.m_pIShell;
pme->m_pIDisplay = pme->m_pOwner->a.m_pIDisplay;
pVtbl = MALLOC(sizeof(VTBL(IWindow)));
MEMCPY(pVtbl, pvt, sizeof(VTBL(IWindow)));
INIT_VTBL(pme, IWindow, *pVtbl);
return (IWindow *)pme;
}
为什么非要在pme里面申请,然后pVtbl = (VTBL(IWindow) *)((byte *)pme + nSize);呢?
外国人都怎么想的呢?