boost库 - shared_ptr实际应用
2008-08-19 11:32
281 查看
1、内存回收方式。
默认的shared_ptr以delete销毁所拥有的裸指针,然而在实际应用中,特别是网游服务器这种存在着大批量对象创建、销毁的工程,单一的销毁方式就不再适用了。毕竟在上述环境下,采用memory pool做内存管理会更好。而这样回收动作也需由自己来控制,不再是单单一个delete了事。
细看了shared_ptr的源码,它的删除动作是由以下代码做到的:
template<class T> inline void checked_delete(T * x)
{
// intentionally complex - simplification causes regressions
typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
(void) sizeof(type_must_be_complete);
delete x;
}
ok, 一个模板函数,这样做起来就简单了,我们只需要根据自己的对象特化出一个自己的版本就行,如下:
namespace boost
{
template<>
inline void checked_delete(GameGroupUnit* GameGroup) // GameGroupUnit是自己的对象
{
GameGroup->~GameGroupUnit();
GameGroupPool::SINGLETON::Instance().free(GameGroup); // 自定的回收内存方式.
}
};
2、操作符
通常选择shared_ptr,都会将其与stl container相结合使用。而stl很多泛型算法都需要容器所存对象的比较操作符。
我们避免将裸指针存入stl容器,就是因为裸指针无法提供所指对象的比较操作。
回头再来看下shared_ptr,它的源码中也没有提供比较操作符,那我们就自己做一个,如下:
namespace boost
{
template<class T>
inline bool operator< (const shared_ptr<T>& right, const shared_ptr<T>& left)
{
return *right < *left;
}
};
默认的shared_ptr以delete销毁所拥有的裸指针,然而在实际应用中,特别是网游服务器这种存在着大批量对象创建、销毁的工程,单一的销毁方式就不再适用了。毕竟在上述环境下,采用memory pool做内存管理会更好。而这样回收动作也需由自己来控制,不再是单单一个delete了事。
细看了shared_ptr的源码,它的删除动作是由以下代码做到的:
template<class T> inline void checked_delete(T * x)
{
// intentionally complex - simplification causes regressions
typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
(void) sizeof(type_must_be_complete);
delete x;
}
ok, 一个模板函数,这样做起来就简单了,我们只需要根据自己的对象特化出一个自己的版本就行,如下:
namespace boost
{
template<>
inline void checked_delete(GameGroupUnit* GameGroup) // GameGroupUnit是自己的对象
{
GameGroup->~GameGroupUnit();
GameGroupPool::SINGLETON::Instance().free(GameGroup); // 自定的回收内存方式.
}
};
2、操作符
通常选择shared_ptr,都会将其与stl container相结合使用。而stl很多泛型算法都需要容器所存对象的比较操作符。
我们避免将裸指针存入stl容器,就是因为裸指针无法提供所指对象的比较操作。
回头再来看下shared_ptr,它的源码中也没有提供比较操作符,那我们就自己做一个,如下:
namespace boost
{
template<class T>
inline bool operator< (const shared_ptr<T>& right, const shared_ptr<T>& left)
{
return *right < *left;
}
};
相关文章推荐
- Boost库之shared_ptr应用
- Boost库的智能指针shared_ptr剖析
- boost库shared_ptr实现桥接模式
- boost库shared_ptr实现桥接模式
- shared_ptr 最简单应用
- (六)boost库之内存管理shared_ptr
- Boost库学习—智能指针Shared_ptr学习01
- Boost库学习随记三 smart_ptr库、soped_ptr、scoped_array、shared_ptr、shared_array、weak_ptr等等
- weak_ptr的作用及应用场景——shared_ptr的循环引用问题
- (六)boost库之内存管理shared_ptr
- Boost库中的智能指针 shared_ptr智能指针
- C++应用系列:用智能指针shared_ptr中引用计数思想进行动态内存管理
- std::auto_ptr boost::shared_ptr智能指针的应用
- C++:Boost库智能指针_shared_ptr
- boost库的智能指针shared_ptr结合容器vector的使用
- shared_ptr应用细节
- 【Boost】boost库中智能指针——shared_ptr
- (六)boost库之内存管理shared_ptr
- boost库:智能指针(auto_ptr、scoped_ptr、shared_ptr)浅谈
- boost库之shared_ptr