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

兰溪好品质高端网站设计网站建设主要考虑哪些因素

兰溪好品质高端网站设计,网站建设主要考虑哪些因素,网站怎么做前后台存取,网新企业网站管理系统(1)、具体讲一下shared_ptr自动管理内存的原理/引用计数的具体原理/shared_ptr引用计数什么时候会增加,什么时候会减少? 在shared_ptr的内部维护了⼀个计数器,来跟踪有多少个shared_ptr对象指向了某⼀个资源。当计数器…

(1)、具体讲一下shared_ptr自动管理内存的原理/引用计数的具体原理/shared_ptr引用计数什么时候会增加,什么时候会减少?

在shared_ptr的内部维护了⼀个计数器,来跟踪有多少个shared_ptr对象指向了某⼀个资源。当计数器的值减少到0的时候,shared_ptr就会调⽤delete(或者⽤户⾃定义的⽅法)来释放资源。
引用计数器何时增加:
1.新建⼀个shared_ptr并指向了⼀个资源时。
2.复制构造函数创建⼀个新的shared_ptr时。
3.⽤复制运算符将⼀个shared_ptr给另⼀个shared_ptr对象赋值时。
引⽤计数器何时减少:
1.当⼀个shared_ptr对象被销毁时,⽐如局部变量离开作⽤域,或者类成员变量析构时。
2.当⼀个shared_ptr对象不再指向⼀个资源时,例如通过reset⽅法或者赋值运算符指向另⼀个资源时。

(2)、shared_ptr是线程安全的吗

1、多线程代码操作的是同一个shared_ptr的对象是线程不安全的。

2、多线程代码操作的不是同一个shared_ptr的对象,但不同的shared_ptr指向了相同的内存,此时是线程安全的。

2、多线程情况下,管理同一个数据的shared_ptr在进行计数的增加和减少时是原子操作,是线程安全的。

(3)、手撕一下shared_ptr

(4)、

1. 基本原理说明(先讲理论再写代码)

"shared_ptr 是一种共享所有权的智能指针,通过引用计数机制管理对象的生命周期。多个 shared_ptr 可以指向同一个对象,当最后一个 shared_ptr 被销毁时,对象才会被删除。"

2. 关键组件

"它需要维护两个核心数据成员:

  • 原始指针 T* ptr

  • 引用计数 int* ref_count(必须用指针,所有实例共享)

引用计数必须放在堆上,因为多个 shared_ptr 需要共享同一个计数器。"

3. 必须实现的成员函数

在写代码时,至少要包含以下核心实现:

template <typename T>
class SharedPtr {
private:T* ptr;int* ref_count;void release() {if (ref_count && --(*ref_count) == 0) {delete ptr;delete ref_count;}}
public:// 1. 构造函数explicit SharedPtr(T* p = nullptr) : ptr(p), ref_count(p ? new int(1) : nullptr) {}// 2. 拷贝构造函数SharedPtr(const SharedPtr& other): ptr(other.ptr), ref_count(other.ref_count) {if (ref_count) ++(*ref_count);}// 3. 移动构造函数SharedPtr(SharedPtr&& other) noexcept: ptr(other.ptr), ref_count(other.ref_count) {other.ptr = nullptr;other.ref_count = nullptr;}// 4. 析构函数~SharedPtr() { release(); }// 5. 拷贝赋值SharedPtr& operator=(const SharedPtr& other) {if (this != &other) {release();ptr = other.ptr;ref_count = other.ref_count;if (ref_count) ++(*ref_count);}return *this;}// 6. 移动赋值SharedPtr& operator=(SharedPtr&& other) noexcept {if (this != &other) {release();ptr = other.ptr;ref_count = other.ref_count;other.ptr = nullptr;other.ref_count = nullptr;}return *this;}// 7. 解引用操作符T& operator*() const { return *ptr; }T* operator->() const { return ptr; }// 8. 辅助函数int use_count() const { return ref_count ? *ref_count : 0; }void reset(T* p = nullptr) { /* 实现重置逻辑 */ }
};

http://www.dtcms.com/wzjs/817443.html

相关文章:

  • 网站建设招标文件技术部分不规则网站模板
  • 网站建设分销协议河南网站优化公司
  • 网站备案注销找哪个部门品牌型网站开发
  • 如果查询网站内页的收录情况移动互联网推广
  • 郴州吧河源seo
  • 自助微信网站梦创义网站建设
  • 大连网站哪家做的好?html仿淘宝首页电子商务网站首页
  • 深圳网站建设知名公司网站开发人员薪酬
  • 郑州网站技术顾问莱州网站建设效果
  • 保卫处网站建设网站界面版式
  • 东莞网页模板建站阳萎早谢吃什么药最好
  • 2017做哪些网站能致富网站开发及维护合同
  • 建新建设集团有限公司网站装修价格
  • 中学生制作网站怎么做手机主题wordpress
  • 海口模板建站定制网站企业网站不被百度收录
  • 陕西省住房和建设厅网站上海模板网站建站
  • 餐饮环境评估在哪个网站做dede网站地图模板下载
  • 建立网站的流程的合理顺序中国人做外贸网站都卖什么手续
  • 天津市做公司网站的公司网站建设都需要哪些材料
  • 苏州公司网站建设公司杭州网站建设方案
  • wordpress外贸建站教程手机wap网站模板
  • 生活家装饰官方网站广告公司名称取名
  • 做led视频好的网站周浦做网站
  • 网站建设咨询公司排名cad图库大全素材免费下载
  • 银锭网那个网站做的 好怎么在网站后台删除图片
  • python做网站比php好html5网站制作分工
  • 网站开发常用图标自己做的网站怎么接入数据库
  • 鹤壁哪有做网站的做网站用jquery
  • 常熟建设局网站网页设计制作思路
  • 宁波网站优化建站公司微信个人公众号怎么创建