引用计数的智能指针——sharedptr的模拟实现

      在处理异常时,由于要抛出异常,经常导致申请空间未释放,打开的文件未关闭等情况,这时,智能指针便应运而生。

      智能指针功能和普通指针最大的区别就在于智能指针在退出堆栈时会自动调用析构函数而不会存在忘记释放空间的问题,而且它任然可以对指针进行赋值、解引用等操作。那就来简单的实现一下智能指针吧。

那么那个DEL类又有什么用呢?

DEL的存在是由于编译器并不清楚你申请内存的方式,也就不知道该如何释放他,而你就很有必要告诉编译器。删除器是仿函数的一个应用,仿函数其实是一个类,它实现了operator(),因此调用时看起来就和函数一样,所以叫仿函数。

写的差不多了来测试一下子
void testsharedptr()
{
	SharedPtr<int, Del<int>> p1(new int(10));
	SharedPtr<int, DelArray<int>> p2(new int[10]);
	SharedPtr<FILE, Fclose<FILE>> p3(fopen("test1.txt", "w"));
	SharedPtr<int, Free<int>> p4((int*)malloc(10 * sizeof(int)));
	SharedPtr<int, Del<int>> p12 = p1;
}
最后看运行结果
正如预期,不同的申请方式也对应了不同的释放方式。


你可能感兴趣的:(STL,智能指针)