Я читаю исходный код CString
в MFC . Мне очень любопытно о способе реализации конструктора CString::CString(LPCTSTR lpsz)
.
В моем понимании, перед копированием строки, обозначенной lpsz
, нужно только проверить, является ли lpsz
значением NULL
, но не нужно комбинировать с проверкой, является ли HIWORD(lpsz)
значением NULL
.
Есть ли какой-нибудь MFC парень, проходящий здесь и желающий дать некоторые объяснения?
CString::CString(LPCTSTR lpsz)
{
Init();
if (lpsz != NULL && HIWORD(lpsz) == NULL)
{
UINT nID = LOWORD((DWORD)lpsz);
if (!LoadString(nID))
TRACE1("Warning: implicit LoadString(%u) failed\n", nID);
}
else
{
int nLen = SafeStrlen(lpsz);
if (nLen != 0)
{
AllocBuffer(nLen);
memcpy(m_pchData, lpsz, nLen*sizeof(TCHAR));
}
}
}