(转)关于CString总结

 

本文转自: http://topic.csdn.net/t/20031208/15/2540422.html

关于CString总结

前言:串操作是编程中最常用也最基本的操作之一
 

     做为VC程序员,无论是菜鸟或高手都曾用过CString.而且好像实际编程中很难离得开它(虽然它不是标准C++中的库).因为MFC中提供的这个类对我们操作字串实在太方便了,CString不仅提供各种丰富的操作函数、操作符重载,使我们使用起串起来更象basic中那样直观;而且它还提供了动态内存分配,使我们减少了多少字符串数组越界的隐患。但是,我们在使用过程中也体会到CString简直太容易出错了,而且有的不可捉摸。所以有许多高人站过来,建议抛弃它。
        在此,我个人认为:CString封装得确实很完美,它有许多优点,如“容易使用   ,功能强,动态分配内存,大量进行拷贝时它很能节省内存资源并且执行效率高,与标准C完全兼容,同时支持多字节与宽字节,由于有异常机制所以使用它安全方便”   其实,使用过程中之所以容易出错,那是因为我们对它了解得还不够,特别是它的实现机制。因为我们中的大多数人,在工作中并不爱那么深入地去看关于它的文档,何况它还是英文的。  
      由于前几天我在工作中遇到了一个本不是问题但却特别棘手、特别难解决而且莫名惊诧的问题。最后发现是由于CString引发的,后来,没办法,我把整个CString的实现全部看了一遍,才慌然大悟,并彻底弄清了问题的原因(这个问题,我已在csdn上开贴)。在此,我想把我的一些关于CString的知识总结一番,以供他(她)人借鉴,也许其中有我理解上的错误,望发现者能通知我,不胜感谢。

1   CString实现的机制 

      CString是通过“引用”来管理串的,“引用”这个词我相信大家并不陌生,象Window内核对象、COM对象等都是通过引用来实现的。而CString也是通过这样的机制来管理分配的内存块。实际上CString对象只有一个指针成员变量,所以任何CString实例的长度只有4字节. 
      即:   int   len   =   sizeof(CString);//len等于4
     这个指针指向一个相关的引用内存块,如图:   CString   str( "abcd ");
                                                                                        ___
          ____________                                                     |       |  
        |                         |                                                   |       |  
        |   0x04040404   |                                                   |       |     head部,为引用内存块相关信息
        |____________|                                                   |       |
                  str                                                               |___|
                                                                                      | 'a '|   0x40404040
                                                                                      | 'b '|
                                                                                      | 'c '|
                                                                                      | 'd '|
                                                                                      |   0   |

    正因为如此,一个这样的内存块可被多个CString所引用,例如下列代码:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值