推荐一个强大的智能指针!

是个老外写的,只需包含一个.h文件,支持两种模式:

1、AutoPtr,支持自动删除引用,就是STL那个的类似物,不能放入容器~

2、Ptr,作者主推的,支持内存泄露检测(使用自定义操作符NEW)+野指针保护(不会再SIGSEGV啦!),可以放入容器!

地址:http://www.csc.lsu.edu/~kosmas/smartPointers.html

下面我们来看一下这个强大智能指针的用法!

/*
 * main.c
 *
 *   Created on: 2010-4-16     
 *  Description: 
 *    Copyright: 2010 @ ICT Li Heyuan
 */

#include "../include/Ptr.h"
#include <vector>
using std::vector;

class TestClass: public SmartObject
{
public:
	TestClass()
	{
		printf("construct\n");
	}

	~TestClass()
	{
		printf("destruct.\n");
	}

	void print()
	{
		printf("haha\n");
	}

	const char* GetClassName() const
	{
		return "TestClass";
	}
};

void func()
{
	printf("in func()");

	//需要手动删除的Ptr支持内存泄露检测+野指针保护!可放入STL容器!
	Ptr<TestClass> p1;
	p1 = NEW(TestClass);//使用NEW可以支持检测内存泄露!!
	p1->print();
	printf("addr:%ld\n", (long) p1.GetTargetProxy());
	delete p1;
	std::vector<Ptr<TestClass> > vec;
	vec.push_back(p1);
	//	p1->print();这个只会抛出异常char *而不会SIGSEGV!
}

void func2()
{
	printf("in func2()");

	//支持自动删除的AutoPtr,但是不能放入容器!
	AutoPtr<TestClass> p1(new TestClass);
	//func2()函数结束后会自动删除~
}

int main()
{
	func();
	func2();
	printf("bye.\n");
	return 0;
}

Leave a Reply

Your email address will not be published.