CString源代码中的疑问
_AFX_INLINE CStringData* CString::GetData() const
{ ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; }中((CStringData*)m_pchData)-1;干嘛要减1呢?难道为了去掉“\n”?似乎又不像。
然后(CStringData*)m_pchData直接转化为CStringData难道能给结构体CStringData的成员变量初始化?觉得很奇怪
[解决办法]
GetData()返回CStringData.这个结构体描述了CString的字符串长度、引用次数和锁定情况。实际上,这个结构体后面紧接的就是该CString的字符串,所以,GetData()所做的工作就是将所保存的字符串指针(m_pchData)减sizeof(CStringData)后强制类型转换返回。这里的-1,就像当与-sizeof(CStringData)