EffictiveC++用对象管理资源

若动态的申请一个资源,而后应删除之,但并不能保证二者期间不出现return或者异常,而根本不经过delete。

所以总是依靠delete删除申请的资源是不靠谱的。

解决方法:C++中有一个auto_ptr,用它装载所申请的对象资源可以解决这个问题

std::auto_ptr<myclass> pmyclass(Create());

这样在申请资源的同时将其马上装入auto_ptr中。然后在使用之后,不管在何处,当auto_ptr析构之后,所申请的资源将自动的释放,而不用我们去管理。

另存在一个问题,当资源释放过程中产生异常,那就需要令讨论了。


需要注意的是:不要让多个auto_ptr同时指向一个资源。否则出现不同步现象。  为此 auto_ptr对拷贝构造函数和赋值函数都进行了特殊的定义,调用他俩,返回的都是null;

它的这个特性就决定了不能有一个以上的auto_ptr指向相同的资源。  对于容器来说,这个特性很坑爹


代替的方案是:引用计数。类似于COM中的引用计数?

std::tr1::shared_ptr<myclass> pmyclass(Create());

这样就可以用pmyclass1=pmyclass2;等操作了。当两个指针都销毁,那么指向的资源也自动的销毁。

注:auto_ptr和shared_ptr的delete操作是在析构函数中的。而且是delete,不是delete[ ]。所以指向数组类的对象,就不行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值