1、struct结构中使用CString,建议使用wchar_t*或char*代替
2、struct或class使用父类或父结构删除指针时,注意子类或者派生类是否有成员变量占用了空间,如果子类或派生类中没有成员变量只有一些调用函数,那么可以用父类或父结构来删除,否则必须强制转换成子类或者子结构再进行删除。下面是正确的示例。
数据定义
enum eABC
{
eB,
eC,
};
struct A
{
int m_Type;
int m_iID;
wchar_t* m_strName;
};
struct B: public A
{
double m_dValue;
wchar_t* m_strMetro;
};
struct C: public A
{
int m_iOpt;
vector<int> m_aValueCol;
vector<wchar_t* > m_aValueName;
};
vector<A*> m_vecA;
释放内存
if (m_vecA.size()>0)
{
for (size_t i=0; i<m_vecA.size(); i++)
{
if (m_vecA[i] !=NULL)
{
if (m_vecA[i]->m_Type == eB)
{
B * pB = (B *) m_vecA[i];
if (pB !=NULL)
{
delete pB;
pB = NULL;
continue;
}
}
else if (m_vecA[i]->m_Type == eC)
{
C * pC= (C *) m_vecA[i];
if (pC !=NULL)
{
pC->m_aValueCol.clear();
pC->m_aValueName.clear();
delete pC;
pC = NULL;
continue;
}
}
}
if (m_vecA[i])
{
delete m_vecA[i];
m_vecA[i] = NULL;
}
}
}
m_vecA.clear();
3、申请和释放的位置不在同一作用域而导致的内存泄漏。
如:在类外new一个全局变量,再类里释放就会造成内存泄漏