class CC{ ... };
class CMyClass{
public:
CMyClass()
{
m_p=(CC *)new CC;
}
~CMyClass()
{
delete m_p;
}
private:
void * m_p;
class CMyClass{
public:
CMyClass()
{
m_p=(CC *)new CC;
}
~CMyClass()
{
delete m_p;
}
private:
void * m_p;
};
若类CC包含有一个non-trivial的析构函数比如含有一个string成员,就可能会造成内存泄漏。
因为是这样的:
+----------------------------+--------------------+---+
m_p -> | Your object | string member | p |
+----------------------------+--------------------+-+-+ +--------
+---->| .....
+--------
当delete m_p 的时候,如果是用自己的类型,那么析构函数会被调用,
然后析构函数调用 string member 的析构函数,它再去释放自己管理的其他内存
如果用 void * 来回收内存,那么没有机会调用CC的析构函数,
string 管理的内存自然也没人来释放了