您的位置:首页 > 编程语言 > C语言/C++

《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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: