思想:利用对象管理资源,用析构函数自动删除指针
- 避免资源泄漏
- 避免异常处理导致的代码编写困难,可执行文件变大的
class ALA {
public:
virtual void processAdoption() = 0;
};
class Puppy: public ALA {
public:
virtual void processAdoption() {
std::cout << "Puppy\n";
}
};
class Kitten: public ALA {
public:
virtual void processAdoption() {
std::cout << "Kitten\n";
}
};
ALA* readALA(std::istream& s) {
return new Puppy();
}
// void processAdoptions(std::istream& dataSource) {
// while (dataSource) {
// ALA *pa = readALA(dataSource);
// pa->processAdoption();
// delete pa;
// break;
// }
// }
// void processAdoptions(std::istream& dataSource) {
// while (dataSource) {
// ALA *pa = readALA(dataSource);
// try {
// pa->processAdoption();
// } catch(...) {
// delete pa;
// throw;
// }
// delete pa;
// break;
// }
// }
void processAdoptions(std::istream& dataSource) {
while (dataSource) {
std::unique_ptr<ALA> pa(readALA(dataSource));
pa->processAdoption();
break;
}
}