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

多线程相关 专栏收录该内容
5 篇文章 0 订阅

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
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值