2009-03-29 15:50
都是这周看书以及代码的总结: 1void 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}
所以Stl提供了一个智能指针来解决这个问题,我们可以先模拟实现一个智能指针的类实现。
1// 关于一个智能指针的定义
2template<typename Type> 3class auto_ptr 4{ 5public: 6 auto_ptr(T *p =NULL) :Ptr(p) 7 { } 8 ~auto_ptr() 9 { 10 delete Ptr; 11 } 12private: 13 Type *Ptr; 14}; 15 16 17void ProcessAdoption(istream &data) 18{ 19 20 while (data) // 如果还有数据 21 { 22 auto_ptr<ALA> pa(readALADara(data)); 23 pa->DealProcessAdoption(data); 24 } 25 return; 26}
然后我看到Effective STL的条款 因为auto_ptr并不是完美无缺的,它的确很方便,但也有缺陷,在使用时要注意避免。首先,不要将auto_ptr对象作为STL容器的元素。C++标准明确禁止这样做,否则可能会碰到不可预见的结果 auto_ptr的另一个缺陷是将数组作为auto_ptr的参数: auto_ptr<char> pstr (new char[12] ); //数组;为定义 然后收集了关于auto_ptr的几种注意事项: 然后笔者从而推荐的是boost的shared_ptr,然后看完shared_ptr关于智能指针的介绍与例子。
1. shared_ptr是Boost库所提供的一个智能指针的实现,shared_ptr就是为了解决auto_ptr在对象所有权上的局限性(auto_ptr是独占的),在使用引用计数的机制上提供了可以共享所有权的智能指针. 2. shared_ptr比auto_ptr更安全 3. shared_ptr是可以拷贝和赋值的,拷贝行为也是等价的,并且可以被比较,这意味这它可被放入标准库的一般容器(vector,list)和关联容器中(map)。 关于shared_ptr的使用其实和auto_ptr差不多,只是实现上有差别,关于shared_ptr的定义就不贴代码了,以为内开源,可以网上找 要了解更多关于auto_ptr的信息,可以查看more effective c++ 的p158页条款28 要了解shared_ptr 类模板信息,可以查看boost 1.37.0中文文档,而且支持数组的shared_array 类模板 (#)
|
|