关于CStringArray的剖析

CStringArray是MFC实现的动态数组,这个数组中存放的元素类型是CString.

class CStringArray
{
  CString* m_pData;//存放着动态数组首元素的地址
  int m_nSize;//动态数组中实际有多少个元素
  int m_nMaxSize;//动态数组中的容量
  int m_nGrowBy;//每一次扩容时,增长的元素个数。默认为0,按默认方式增长,min(1024,max(4,m_nSize/8))
};

每次Add一个新元素时,当容量够时,都会先在已有空间执行一次就地构造,然后执行CString::operator=。当容量不够,会额外做以下操作:
申请(旧的容量+增长策略指定的增长数)的新空间,然后将旧的空间拷贝到申请的空间,删除旧的空间
FreeExtra函数会重新分配一块内存,该内存的容量与元素个数相同。
InsertAt函数会在插入位置插入nCount个CString,当插入位置远超数组大小,并不会在m_nSize后插入,而是在插入位置后插入元素
CStringArray依靠SetSize函数申请新空间,就地构造,就地析构现有空间,删除原有空间。可以说,SetSize是CStringArray的核心函数

posted @ 2024-06-28 13:42  DJFFding  阅读(165)  评论(0)    收藏  举报