五一闲来无事,决定开始研究点boost的东西,看看源代码,学习一下高手的编程风格
今天开始把boost的学习体会和代码一点点发布在这里,以便以后回顾
#include "boost/scoped_ptr.hpp
#include <string>
#include <iostream>
using namespace std;
class Container
{
class TomImp
{
public:
TomImp()
{
cout<<" tom cons"<<endl;
}
~TomImp()
{
cout<<" tom des"<<endl;
}
};
public:
Container():Impl(new TomImp)
{
cout << "Container Cons,but ..."<<endl;
throw 4;
}
~Container()
{
cout<<" container Des~"<<endl;
}
private:
boost::scoped_ptr<TomImp> Impl;
};
void main() {
try {
Container Impl;
}
catch(...)
{
}
}
//输出
tom cons
Container Cons,but ...
tom des
总结:使用SCOPED_PTR 防止内存泄漏
Container的构造函数抛出异常的时候,依然可以调用TomImp的析构函数
使用普通 TomImp *Impl;无法到达这个效果
std::auto_ptr也可以,auto vs scoped 的区别参考 beyond c++ standard library