WTL :: CString 包含在 WTL 头文件 atlmisc.h 中,并且在未定义宏 _WTL_NO_CSTRING 时可用。
WTL :: CString 是一个非常独立的类,内存结构与 BSTR 类似,即有一个额外的字符串信息头标识字符串相关信息,信息头后紧跟有效字符串数据。此外它还借鉴 COM ,使用引用计数管理字符串对象指针的复制和对象的析构,使得对字符串对象的复制只是复制指针而引用相同内存区的有效字符串数据。这样提高了内存利用率和操作的高效性。引用计数也管理对象的生命期,使其超出生命期没有被使用时自动释放内存。更为关键的是,利用三个全局变量,WTL :: CString 让所有初始化为空的字符串对象都指向同一个内存块,这提供了相当多的便利。
WTL :: CString 兼容 UNICODE/ANSI,提供了 7 个重载版本的构造函数接收不同类型的参数。重载的赋值操作符“=,+=”、拼接操作符“+”以及查找替换,子串操作,使得 WTL :: CString 无与伦比。WTL::CString 所提供的全部操作可以查看 WTL Documentation。
下面具体分析 WTL :: CString 的内存结构和初始化。不过在这之前,先讲讲指针与内存块的关系:
指针的真正含义,在于它用类型标识符指示编译器如何解析它所指向的内存块。一旦它指明了内存块的具体类型,编译器就安装其指明的类型来访问此内存块。这里“访问”的含义需要引起注意,并且“访问”的过程发生时,编译器必须要知道相应类型的具体定义。因此,这就间接地决定了“访问”是运行时行为。比如:
struct Data
{
char a;
char b;
int c;
int d;
}
int nTemp[4] = {10, 10, 0, 0};
(Data*)pdata = (Data*)&n