五一闲来无事,决定开始研究点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
本文通过实战案例展示了如何使用 Boost 库中的 scoped_ptr 来有效管理资源,避免内存泄漏问题。通过构造函数中抛出异常的情况,验证了 scoped_ptr 在异常处理时能够正确释放资源。
4364

被折叠的 条评论
为什么被折叠?



