2012年(158)
分类: C/C++
2012-11-26 09:40:01
网友评论2012-11-26 09:40:51
func
难以解决的问题是多个指针引用同一块内存,而其中一个指针被delete。
我觉得同一个指针被重复delete的情况少,同一段内存被重复释放的情况会多些。
delete和free本身就支持释放0指针。这么做大概是为了免得大家再写if(ptr) {free(ptr); ptr=0;}这样的啰嗦的结构。
不靠指针值标记内存已释放,那只能靠一定的代码结构。比如只在构造里new,只在析构时delete。析构完了,基本上没人再动类里的指针,除非疯了。
我倒觉得严格要求new/delete配对,不利于代码的灵活编写。
比如一个指针的数组,一番操作后(离散的申请释放内存),最后一总清理。除非之前的释放做了0标记,没有太好的办法在一个总的释放调用中,把数组释放干净。
如果你同意已释放的标记是必须的,那么0xFEEEFEEE这个值,我就不同意了。它应该不属于某种标准吧,这个值万一是个正常的地址