想到了一个比较简单的方法判断指针是已被释放

这几天在基础不好的情况下开始用c++强行写cocos2d,碰到了无数堆对象栈对象、空指针野指针的问题

今天想到了一个较为简单的判断指针是否已被释放的方法。

作者:郑旗舰(本人)
链接:https://www.zhihu.com/question/24331527/answer/117956747
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

想到了一个比较简单的方法,一个野指针/悬垂指针指向的内存区域可能无效可能未知,但是这个指针仍然会被当作指针所指的对象解析。
那么可以定义一个基类,并让需要判断的类继承他。基类中包含一个私有长整型数,在构造函数里赋给一个特定数值(这个特定值应当不容易与内存中的不确定的数据重复,一般来说重复的概率也有一千八亿亿分之一了),析构函数中将该值置零。
那么如果一个继承自该类的指针直接判断该整数是否等于特定值即可。
测试代码如下:

#include "stdafx.h"
#include <iostream>
using namespace std;
class Ptr
{
public:
	Ptr() 
		:value(0x123456789ABCDE0)
	{
		cout << "constructor:" << value << endl;
	}
	~Ptr()
	{
		value = 0;
		cout << "destructor:" << value << endl;
	}
	bool isWildPointer() { return value != 0x123456789ABCDE0; }
private:
	long long value;
};

int main()
{
	Ptr* a = new Ptr();
	cout << "a:" << a << " isWildPointer:" << a->isWildPointer() << endl; 
	//输出为 a:00D8E4B0 isWildPointer:0
	delete a;
	cout << "a:" << a << " isWildPointer:" << a->isWildPointer() << endl;
	//输出为 a:00D8E4B0 isWildPointer:1
    return 0;
}

发布了3 篇原创文章 · 获赞 2 · 访问量 5177
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览