CString的GetData和GetBuffer到底有什么不同?该如何处理
CString的GetData和GetBuffer到底有什么不同?
有效率上的区别,还是功能上有所不同呢?
我怎么感觉两个一样?
------解决方案--------------------
同问·
------解决方案--------------------
GetData CString 保护成员
只能在成员函数和继承类中调用
而GetBuffer 公共成员
主要区别是两个函数的返回值不一样
怎么会相同呢
------解决方案--------------------
LPTSTR CString::GetBuffer(int nMinBufLength),它的实现方法是:
首先通过CString::GetData()取得CStringData对象的指针。该指针是通过存放字符串的指针m_pchData先后偏移sizeof(CStringData),从而得到了CStringData的地址。
然后根据参数nMinBufLength给定的值重新实例化一个CStringData对象,使得新的对象里的字符串缓冲长度能够满足nMinBufLength。
然后在重新设置一下新的CStringData中的一些描述值。
最后将新CStringData对象里的字符串缓冲直接返回给调用者。
------解决方案--------------------
一个公有、一个保护,而且参数与返回值都不相同
CStringData* GetData() const; //protected,外界无法使用
LPTSTR GetBuffer(int nMinBufLength);//public
------解决方案--------------------
这么多不同,怎么会是一样的呢。
有效率上的区别,还是功能上有所不同呢?
我怎么感觉两个一样?
------解决方案--------------------
同问·
------解决方案--------------------
GetData CString 保护成员
只能在成员函数和继承类中调用
而GetBuffer 公共成员
主要区别是两个函数的返回值不一样
怎么会相同呢
------解决方案--------------------
LPTSTR CString::GetBuffer(int nMinBufLength),它的实现方法是:
首先通过CString::GetData()取得CStringData对象的指针。该指针是通过存放字符串的指针m_pchData先后偏移sizeof(CStringData),从而得到了CStringData的地址。
然后根据参数nMinBufLength给定的值重新实例化一个CStringData对象,使得新的对象里的字符串缓冲长度能够满足nMinBufLength。
然后在重新设置一下新的CStringData中的一些描述值。
最后将新CStringData对象里的字符串缓冲直接返回给调用者。
------解决方案--------------------
一个公有、一个保护,而且参数与返回值都不相同
CStringData* GetData() const; //protected,外界无法使用
LPTSTR GetBuffer(int nMinBufLength);//public
------解决方案--------------------
这么多不同,怎么会是一样的呢。