这里是一个简单的代码示例,如果没有auto_ptr,
1
void ProcessAdoption(istream &data)
2
{
3
4
while (data) // 如果还有数据
5
{
6
ALA *pa = readALAData(data); // 取出下一个数据
7
pa->DealProcessAdoption(data); // 处理
8
9
delete pa; // 释放资源
10
}
11
return;
12
}
void ProcessAdoption(istream &data)2
{3
4
while (data) // 如果还有数据5
{6
ALA *pa = readALAData(data); // 取出下一个数据7
pa->DealProcessAdoption(data); // 处理8
delete pa; // 释放资源10
}11
return;12
}
如果在DealProcessAdoption有一个exception,会发生什么事情,因为ProcessAdoption不能捕获他,所以这段代码很危险,所以DealProcessAdoption后面的代码可能会跳过,造成内存泄露。
如果利用try catch去捕获他,会搞得代码很乱,又缺少美观性。
所以Stl提供了一个智能指针来解决这个问题,我们可以先模拟实现一个智能指针的类实现。
1
// 关于一个智能指针的定义
2
template<typename Type>
3
class auto_ptr
4
// 关于一个智能指针的定义2
template<typename Type>3
class auto_ptr4