《More Effective C++》学习心得(六) auto_ptr的用法
2012-04-06 14:58
483 查看
#include<iostream> using namespace std; class ALA { public: virtual void processAdoption()=0; protected: private: }; class Puppy:public ALA { public: virtual void processAdoption() { } protected: private: }; class Kitten:public ALA { public: virtual void processAdoption() { } protected: private: }; ALA * readALA(istream &s) { return new Puppy; } void processAdoptions(istream& dataSource) { while (dataSource) { ALA *pA=readALA(dataSource); //如果发生错误,就无法delete pA,所以需要try……catch try { pA->processAdoption(); } catch (CException* e) { delete pA; throw; } delete pA; } } void main() { processAdoptions(cin); }
《More Effective C++》中关于异常的处理:
对于如果函数pA->processAdoption()发生exception。位于pA->processAdoption()之后的所有语句都会跳过,不再执行,pA就不会被删除。解决办法就是,以一个“类似指针的对象”取代pA;如此,“类似指针的对象”被自动销毁,在其destrcutor调用delete;这种对象我们称为“smart pointer”;
#include<iostream> #include <memory> using namespace std; class ALA { public: virtual void processAdoption()=0; protected: private: }; class Puppy:public ALA { public: virtual void processAdoption() { } protected: private: }; class Kitten:public ALA { public: virtual void processAdoption() { } protected: private: }; ALA * readALA(istream &s) { return new Puppy; } void processAdoptions(istream& dataSource) { while (dataSource) { auto_ptr<ALA> pA(readALA(dataSource)); pA->processAdoption(); } } void main() { processAdoptions(cin); }
相关文章推荐
- More Effective C++ 读书摘要(auto_ptr的一个实现)
- (大卫的阅读笔记)More Effective C++ Item 附2:一个auto_ptr的实现实例
- More Effective C++ Item 附2:一个auto_ptr的实现实例
- 《More Effective C++》学习心得(五) 前置和后置自增运算符
- 《More Effective C++》学习心得(四) 关于类中类型转换
- 《More Effective C++》学习心得(六)各种new和delete操作符
- 《More Effective C++》学习心得(一)
- 《More Effective C++》学习心得(八) 要求(或禁止)对象产生于heap中
- More Effective C++学习心得
- 《More Effective C++》学习心得(二)
- 《More Effective C++》学习心得(七) 构造函数私有化
- 《More Effective C++》学习心得(三) 不要以多态性处理类的对象数组
- C++ auto_ptr智能指针的用法
- C++用法的学习心得(要求包含示例,并反映出利用网络获取帮助的过程)
- C++用法的学习心得
- C++学习之智能指针--auto_ptr、scoped_ptr、scoped_array、shared_ptr、shared_array、weak_ptr
- C++ auto_ptr智能指针的用法
- More effective C++学习总结
- 【C++深入浅出】智能指针之auto_ptr学习
- C++智能指针auto_ptr源码完全解析---以微软auto_ptr为例来探讨auto_ptr的用法