CString 的内存结构和初始化

本文深入剖析了WTL::CString类的内存结构,指出其与BSTR类似,采用引用计数管理内存,所有空字符串对象共享同一内存块。内容涵盖了CStringData结构、全局变量的用途,以及构造函数和成员函数在初始化和内存管理中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值