您的位置:首页 > 其它

new和delete的指针类型必须一致,否则会造成未定义行为

2015-01-22 17:58 232 查看
class CC{ ... };

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 管理的内存自然也没人来释放了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐