shared_ptr跨模块边界的问题
2005-12-08 10:43
1616 查看
如果shared_ptr默认是用delete来释放对象的,而delete动作产生的是本模块的代码,这在windows平台的dll中遇到了问题:可执行程序和dll分属不同模块,分别使用各自的内存管理组件。直接delete,无异于把A堆管理器分配的指针让B堆管理其去释放,崩溃还算好的,悄悄的出错,死都不知道怎么死的。
还好,boost::shared_ptr使用了一个叫get_deleter的东西,内部维护了delete的方法。可是,如果我想自定义一个特别的析构方法怎么办?嗯,特化sp_counted_impl_p<>吧!
特化sp_counted_impl_p可以解决大部分问题。可是,引用计数的问题,则是无法解决的:你不可能重写sp_counted_base。如果我想用shared_ptr指向一个com对象,那么,sp_counted_impl_p<>可以让它工作,但是,com对象内的引用计数将不可能正确。
由此,不由的怀念起Loki的SmartPtr来了,强大的基于策略编程的实现!只要将存储策略中的Destory替换成我想要的实现即可实现定制销毁。替换掉OwnershipPolicy就可以。就算Loki不能进boost(老实说,我认为mpl比typelist好),SmartPtr绝对应该比那shared_ptr强多了!
还好,boost::shared_ptr使用了一个叫get_deleter的东西,内部维护了delete的方法。可是,如果我想自定义一个特别的析构方法怎么办?嗯,特化sp_counted_impl_p<>吧!
特化sp_counted_impl_p可以解决大部分问题。可是,引用计数的问题,则是无法解决的:你不可能重写sp_counted_base。如果我想用shared_ptr指向一个com对象,那么,sp_counted_impl_p<>可以让它工作,但是,com对象内的引用计数将不可能正确。
由此,不由的怀念起Loki的SmartPtr来了,强大的基于策略编程的实现!只要将存储策略中的Destory替换成我想要的实现即可实现定制销毁。替换掉OwnershipPolicy就可以。就算Loki不能进boost(老实说,我认为mpl比typelist好),SmartPtr绝对应该比那shared_ptr强多了!
相关文章推荐
- std::shared_ptr 和 std::weak_ptr的用法以及引用计数的循环引用问题
- shared_ptr的模版推导问题
- 浅谈shared_ptr及shared_ptr涉及到的循环引用问题
- shared_ptr相互引用问题
- std::shared_ptr 和 std::weak_ptr的用法以及引用计数的循环引用问题
- std::shared_ptr 和 std::weak_ptr的用法以及引用计数的循环引用问题
- shared_ptr 循环引用问题
- boost之shared_ptr的一个计数小问题
- 用weak_ptr解决shared_ptr的环形引用问题
- shared_ptr循环引用问题
- version `GLIBCXX_3.4.14' not found, 及shared_ptr.h error: '_Lock_policy' has not been declared 问题
- C++智能指针(三):weak_ptr--解决shared_ptr循环引用问题
- Shared_ptr 相互引用问题
- shared_ptr 配合 weak_ptr 解决环形内存问题
- shared_ptr循环引用问题
- shared_ptr循环引用问题
- boost智能指针shared_ptr使用要注意的几个问题
- shared_ptr出问题的几种情况
- 关于std::shared_ptr与std::enable_shared_from_this循环引用导致的问题
- shared_ptr模版推导的问题