答案 0 :(得分:4)
CString
对象永远不会NULL
。与char*
或wchar*
(可能是NULL
)不同,作为指针的CString
对象的内部缓冲区始终指向数据。对于给定的CString
对象,您只能使用CString::IsEmpty()
来区分它是否为空。
出于同样的原因,LPCTSTR
强制转换操作符永远不会返回NULL
。
答案 1 :(得分:1)
由于CString
类模板 1)的内部布局,存储的指针不能是NULL
。
CString
类模板只有一个类成员:m_pszData
。该成员不仅包含字符串数据,还包含其他信息(如字符串长度,引用计数,缓冲容量等;请参阅CStringData)。该附加信息存储在存储指针的左侧。两个部分(字符串数据和字符缓冲区)必须分配在单个内存块中,因为只有一个指针可以引用它们。由于字符串数据总是需要存在,m_pszData
永远不会是NULL
。
<小时/> 1)
CString
是特定CStringT
模板实例化的typedef。 CStringT
本身来自CSimpleStringT
类模板。