正确释放指针的方式

正确释放指针的方式

释放指针所指向的内存中存在一些坑,这里总结一下

坑点一

在释放内存之时,不仅仅是将该块内存进行释放,还要将指向该块内存的指针置为NULL。如果不置为NULL,该指针将变成悬空指针,下次继续使用该指针时会出现问题。

总之,free或者delete只是将指针指向的内存进行释放,却并没有对指针做任何操作。

坑点二:

只使用上文方法释放内存,依旧会存在以下隐患:

指针释放并值为空,如果只是简单的指针变量,几乎没有时间消耗;但是如果在类的析构函数中delete指针成员变量,可能执行的时间比较长,如果这个时间段内有其他地方再操作这个这个指针变量,将产生错误,所以需要采用防御性编程,如下所示:

// 假设m_instance是类的指针型成员变量

CServerSocket* m_instance;

if (m_instance != NULL)

{

CServerSocket* tmp = m_instance;

m_instance = NULL; // 先置为空,防止其他地方使用即将释放的指针

delete tmp; // 再释放指针所指向的内存

}

相关阅读

365dots 重庆算命比较准的、口碑好、有名的地点推荐

重庆算命比较准的、口碑好、有名的地点推荐

365dots 分享文章赚钱正规平台有哪些,最好的转发文章挣钱平台是哪个?

分享文章赚钱正规平台有哪些,最好的转发文章挣钱平台是哪个?

365dots 佳兆业集团

佳兆业集团

365dots Sandy生二胎只花3分鐘!「帶妝髮去醫院」遭家人虧:生兒還走秀?

Sandy生二胎只花3分鐘!「帶妝髮去醫院」遭家人虧:生兒還走秀?

bt365体育在线 蕲艾的拼音是什么

蕲艾的拼音是什么

bt365体育在线 不是会员怎么去掉土豆的广告 去土豆广告的方法

不是会员怎么去掉土豆的广告 去土豆广告的方法

365dots applealc教程 apple acrade怎么用

applealc教程 apple acrade怎么用

365娱乐app官方版下载 世界杯票有黄牛吗 世界杯现场票多少钱

世界杯票有黄牛吗 世界杯现场票多少钱

365dots 《塞尔达传说:旷野之息》塞尔达红月多久出现一次?

《塞尔达传说:旷野之息》塞尔达红月多久出现一次?