CStringArray跟CDWordArray使用RemoveAt()时候需不需要释放内存
CStringArray和CDWordArray使用RemoveAt()时候需不需要释放内存?
MSDN上这样说:
The RemoveAt function removes the CObject pointer from the array, but it does not delete the object itself.
The following table shows other member functions that are similar to CObArray::RemoveAt.
Class Member Function
CByteArray
void RemoveAt( INT_PTR nIndex , INT_PTR nCount = 1 );
CDWordArray
void RemoveAt( INT_PTR nIndex , INT_PTR nCount = 1 );
CPtrArray
void RemoveAt( INT_PTR nIndex , INT_PTR nCount = 1 );
CStringArray
void RemoveAt( INT_PTR nIndex , INT_PTR nCount = 1 );
CUIntArray
void RemoveAt( INT_PTR nIndex , INT_PTR nCount = 1 );
CWordArray
void RemoveAt( INT_PTR nIndex, INT_PTR nCount = 1 );
------解决方案--------------------
CStringArray内部已有释放代码,不需要手动释放。
------解决方案--------------------
打开 mfc/array_d.cpp 看看实现代码就清除了,
RemoveAt的时候用memmove_s移动数据块,并且只改变下大小,
完全释放是在解析、调用FreeExtra、和SetSize改变大小时发生
MSDN上这样说:
The RemoveAt function removes the CObject pointer from the array, but it does not delete the object itself.
The following table shows other member functions that are similar to CObArray::RemoveAt.
Class Member Function
CByteArray
void RemoveAt( INT_PTR nIndex , INT_PTR nCount = 1 );
CDWordArray
void RemoveAt( INT_PTR nIndex , INT_PTR nCount = 1 );
CPtrArray
void RemoveAt( INT_PTR nIndex , INT_PTR nCount = 1 );
CStringArray
void RemoveAt( INT_PTR nIndex , INT_PTR nCount = 1 );
CUIntArray
void RemoveAt( INT_PTR nIndex , INT_PTR nCount = 1 );
CWordArray
void RemoveAt( INT_PTR nIndex, INT_PTR nCount = 1 );
------解决方案--------------------
CStringArray内部已有释放代码,不需要手动释放。
------解决方案--------------------
打开 mfc/array_d.cpp 看看实现代码就清除了,
RemoveAt的时候用memmove_s移动数据块,并且只改变下大小,
完全释放是在解析、调用FreeExtra、和SetSize改变大小时发生