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

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

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

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

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

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

[cpp]
/*
* 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;
}
[/cpp]

Leave a Reply

Your email address will not be published. Required fields are marked *