当前位置: 首页 > news >正文

合肥做网站汇站网自己怎么搭建网站

合肥做网站汇站网,自己怎么搭建网站,移动办公oa手机版,用手机做网站的app重点: 1.引用计数在堆上(原本应为原子变量) 2.引用计数增加减少需要加锁保证线程安全。 3.内部实现Release函数用于释放资源 4.未实现,增加自定义删除器可以将Release修改为模板函数,传入可调用参数。对于shared_p…

重点:

1.引用计数在堆上(原本应为原子变量)

2.引用计数增加减少需要加锁保证线程安全。

3.内部实现Release函数用于释放资源

4.未实现,增加自定义删除器可以将Release修改为模板函数,传入可调用参数。对于shared_ptr,删除器应当作为构造函数参数传入。故而成员函数需要有std::function对象。

#ifndef SHARED_PTR_SHARED_PTR_H
#define SHARED_PTR_SHARED_PTR_H
#include <mutex>template<typename T>
class Shared_ptr{
public:Shared_ptr(T * row) :_row_ptr(row),_ref_count(new int(1)),_ref_mux(new std::mutex){}~Shared_ptr(){ release(); }//拷贝构造Shared_ptr(const Shared_ptr<T> &sp) :_row_ptr(sp._row_ptr),_ref_count(sp._ref_count),_ref_mux(sp._ref_mux){ add_ref(); }//拷贝赋值Shared_ptr<T>& operator=(const Shared_ptr<T> &sp){if (this->_row_ptr != sp._row_ptr){release();  //释放管理的旧资源_row_ptr = sp._row_ptr;_ref_count = sp._ref_count;_ref_mux = sp._ref_mux;add_ref();}return *this;}public:int& use_count(){ return *_ref_count; }T& operator*(){ return *_row_ptr; }T* operator->(){ return _row_ptr; }T* get(){ return _row_ptr; };void reset(T *sp){if (this->_row_ptr != sp){release();  //释放旧资源,减少引动计数_row_ptr = sp;_ref_count = new int(1);_ref_mux = new std::mutex;} elseadd_ref();}private:T *_row_ptr;int *_ref_count;std::mutex *_ref_mux;//减少引用计数或释放内存void release(){std::unique_lock<std::mutex> lock(*_ref_mux);if (--(*_ref_count) == 0){delete _row_ptr;delete _ref_count;_row_ptr = nullptr; //避免悬空指针_ref_count = nullptr;}}//保证线程安全的前提下加锁增加引用计数void add_ref(){std::unique_lock<std::mutex> lock(*_ref_mux);++(*_ref_count);}
};#endif //SHARED_PTR_SHARED_PTR_H

测试程序:

#include <iostream>
#include <string>
#include "Shared_ptr.h"int main() {Shared_ptr<std::string> ptr1(new std::string("hello"));Shared_ptr<std::string> ptr2(ptr1);std::cout << "ptr2 use_count = " << ptr2.use_count() << "ptr1 use_count = " << ptr1.use_count() << std::endl;Shared_ptr<std::string> ptr3 = ptr2;std::cout << "ptr3 use_count = " << ptr3.use_count() << std::endl;std::cout << *ptr2 << std::endl;auto str = new std::string("ni hao");ptr2.reset(str);std::cout << *ptr2 <<" ptr2 usecount = " << ptr2.use_count() << std::endl;std::cout << ptr1.use_count() << std::endl;return 0;
}

http://www.tj-hxxt.cn/news/43681.html

相关文章:

  • 常州营销型网站建设百度下载链接
  • 北京微信网站建设电话盘多多搜索引擎入口
  • 网站建设公司上海做网站公司南宁seo优化公司
  • 淘宝网站所用编码湖南网站建设推广
  • 如何做网站发产品销售网络营销策略方案
  • 北京网站建设公司官网站点搜索
  • 网页平面设计公司北京网站seo设计
  • 金华商城网站制作网络营销推广合同
  • 黄江镇网站建设公司杭州seo网站排名优化
  • 老实人做网站贴吧友情链接在哪
  • 做网站找哪家好要钱吗百度官网客服
  • 独山县哪里有做网站的做一个微信小程序需要多少钱
  • 做营销型网站服务游戏推广怎么快速拉人
  • 河南富士康网页优化包括什么
  • 网站做菠菜网络推广运营团队
  • 制作一个景点的网站苏州百度代理公司
  • cf刷枪网站怎么做的sem与seo
  • 东海做网站公司设计网站的公司
  • 网站icp备案怎么做seo优化专员
  • 衢州建校地址南宁seo专员
  • 测试页面网站建设百度营销推广登录
  • 网站页面上的下载功能怎么做深圳做网站公司哪家好
  • 广西网站建设.com百度站长平台注册
  • 东莞樟木头网站建设福州百度快速优化排名
  • 宜兴做阿里巴巴网站站长之家 seo查询
  • 菜鸟学做网站的步骤得物app的网络营销分析论文
  • 如何给网站做引流运营和营销是一回事吗
  • 网站备案流程详细站牛网是做什么的
  • 专门卖建筑材料的网站百度竞价开户渠道
  • 沈阳网站制作公司教育机构在线咨询