Linux多线程服务器编程shared_ptr以及weak_ptr实现的弱回调以及对象池管理

shared_ptr以及weak_ptr实现的弱回调以及对象池管理

直接上代码一条一条的解释

class StockFactory:public boost::enable_shared_from_this<StockFactory>,boost::noncopyable
{
public:
	shared_ptr<Stock> get(const string& key)
	{
		shared_ptr<Stock> pStock;//从工厂中产生的相应股票的shared_ptr,如果这只股票不存在先创建。
		MutexLockGuard lock(mutex_);
		weak_ptr<Stock> wkStock=stocks_[key];如果key不存在直接就穿件一个wak_ptr.
		pStock=wkStock.lock();
		if(!pStock)
		{
			pStock.reset(new Stock(key),boost::bind(&Stock::weakDeteleCallBack,boost::weak_ptr(shared_from_this),_1));//这一句话非常重要,这里实			//现了弱回调,把factory的weak_ptr传入到相应的Stock_类,避免延长了factory的生命期,同时在stock类析构的时候可以判断相应的Factory是否			//还活着
			wkStock=pStock;
		}
		return pStock;
	}
private:
	static void weakDeleteCallback(const boost::weak_ptr<StockFactory>& wkFactory,Stock* stock)
	{
		shared_ptr<StockFactory> factory(wkFactory.lock());//尝试提升,看是否还存在Factory
		if(factory)
		{
			fatory->removestock(stock);
		}
		delete stock;
	}
private:
	mutable MutexLock mutex_;
	map<string,weak_ptr<Stock> > stocks_;//一个对象池,使用weak_ptr以避免延长股票类stock的生命期,根据股票号key与相应的对象进行关联。
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值