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

wordpress政企网站Wordpress实现首页特效

wordpress政企网站,Wordpress实现首页特效,山东网站设计,wordpress monster文章目录 1. 计数指针 shared_ptr2. shared_ptr 与函数3. shared_ptr 与 unique_ptr 1. 计数指针 shared_ptr shared_ptr 计数指针又称共享指针,是C11引入的智能指针之一。与unique_ptr不同的是,shared_ptr允许多个指针共享同一块内存。每当一个shared_…

文章目录

  • 1. 计数指针 shared_ptr
  • 2. shared_ptr 与函数
  • 3. shared_ptr 与 unique_ptr

1. 计数指针 shared_ptr

shared_ptr 计数指针又称共享指针,是C++11引入的智能指针之一。与unique_ptr不同的是,shared_ptr允许多个指针共享同一块内存。每当一个shared_ptr 被赋值时,引用计数就会增加。当shraed_ptr被销毁时,引用计数会减小。当引用计数为0时,内存会被自动释放。

shared_ptr内部维护着一个引用计数器,可以通过 use_count() 获取当前引用计数。

代码示例:

#include <iostream>
#include <memory>
using namespace std;int main(int argc, char *argv[]){std::shared_ptr<int> i_p_1 = make_shared<int>(10);cout<< "value: "<< *i_p_1 <<endl;cout<< "use count: "<<i_p_1.use_count() <<endl;// Copystd::shared_ptr<int> i_p_2 = i_p_1;cout<< "value: "<< *i_p_2<<endl;cout<< "i_p_1 use count: " << i_p_1.use_count() << endl;cout<< "i_p_2 use count: " << i_p_2.use_count() << endl;// 修改i_p_2的值*i_p_2 = 30;cout<< "i_p_1 value: " << *i_p_1 << endl;cout<< "i_p_2 value: " << *i_p_2 << endl;// i_p_1 设置为 nullptrstd::shared_ptr<int> i_p_3 = i_p_1;// i_p_1 = nullptr;i_p_1.reset();cout<< "i_p_1 use count: " << i_p_1.use_count() << endl;cout<< "i_p_2 use count: " << i_p_2.use_count() << endl;cout<< "i_p_3 use count: " << i_p_3.use_count() << endl;return 0;
}

代码解析:

  • i_p_1 被初始化为一个 shared_ptr,指向整数10
  • i_p_2 是 i_p_1的副本,因此引用计数会增加
  • 修改了 i_p_2 的值,i_p_1也会变,因为他们共享一块内存
  • 当 i_p_1 被reset() 时,引用计数减少,最终,所有shared_ptr 被销毁时,内存会被自动释放。

2. shared_ptr 与函数

值传入
当 shared_ptr 作为函数参数传递时,默认是值传递(复制传递)。这会增加引用计数,确保指针在函数内部被正确管理。

#include <iostream>
#include <memory>
#include "cat.h"
using namespace std;// 值传入
void cat_by_value(std::shared_ptr<Cat> cat){cout<< cat->get_name() <<endl;cat->set_cat_name("ee");cout<< "func use count :" << cat.use_count() << endl; // 2
}// 引用传入
void cat_by_ref(std::shared_ptr<Cat> &cat){cout<< cat->get_name() <<endl;cat->set_cat_name("ff");cout<< "func use count :" << cat.use_count() << endl;
}// 作为返回值
std::shared_ptr<Cat> get_shared_ptr(){std::shared_ptr<Cat> cat_p = std::make_shared<Cat>("local cat");return cat_p;
}int main(int argc, char *argv[]){std::shared_ptr<Cat> c1 = make_shared<Cat>("dd");cat_by_value(c1);    // 值传递cat_by_ref(c1);         // 引用传递c1->cat_info();cout<< "c1 use_count : " << c1.use_count()<<endl; // 返回值get_shared_ptr()->cat_info();return 0;
}

代码解析:

  • 值传递:当 shared_ptr 作为参数传递时,引用计数增加。函数结束时,局部 shared_ptr 会被销毁,引用计数会减少。
  • 引用传递:使用引用传递时,传递的是原始 shared_ptr,不会增加引用计数
  • 返回值:当 shared_ptr 作为返回值返回时,shared_ptr 会被复制到调用者

3. shared_ptr 与 unique_ptr

  • 不能将 shared_ptr 转化为 unique_ptr
  • unique_ptr 可以转化为 shared_ptr
    • 通过 std::move

常见的设计:

  • 将你的函数返回 unique_ptr 是一种常见的设计模式,这样可以提高代码的复用度,你可以随时改变为 shared_ptr

代码示例:

#include <iostream>
#include <memory>
#include "cat.h"
using namespace std;std::unique_ptr<Cat> get_unique_ptr(){std::unique_ptr<Cat> cat_p = std::make_unique<Cat>("local cat");return cat_p;
}int main(int argc, char *argv[]){std::unique_ptr<Cat> c_p_1 = std::make_unique<Cat>("dd");std::shared_ptr<Cat> c_p_2 = std::move(c_p_1);cout<< "c_p_2.use_count: " <<c_p_2.use_count()<<endl;std::shared_ptr<Cat> c_p_3 = get_unique_ptr(); if(c_p_3){c_p_3->cat_info();cout<< "c_p_3.use_count: "<<c_p_3.use_count()<<endl;}return 0;
}

代码解析:

  • std::move 转换:c_p_1 是一个 unique_ptr,通过 std::move 将其所有权转移给 c_p_2,并转换为 shared_ptr。
  • unique_ptr 到 shared_ptr:返回的 unique_ptr 可以通过 std::move 转换为 shared_ptr,使得多个指针能够共享这块内存

文章转载自:

http://lhE8G1Za.msgrq.cn
http://6cA621Yd.msgrq.cn
http://QD8Fdxwj.msgrq.cn
http://3WUj2Uzu.msgrq.cn
http://DFSJXwQI.msgrq.cn
http://wfrm0dT6.msgrq.cn
http://EMHNwJgH.msgrq.cn
http://amP6GzPk.msgrq.cn
http://TPRWF6Vm.msgrq.cn
http://CBbaeLUO.msgrq.cn
http://H6IYMyzd.msgrq.cn
http://DLGx7obI.msgrq.cn
http://Rzhnt4hO.msgrq.cn
http://hfWBPetc.msgrq.cn
http://NTQdEWLJ.msgrq.cn
http://GDBAhXXw.msgrq.cn
http://9vn4hcRL.msgrq.cn
http://FWDVQ7zz.msgrq.cn
http://Dq9u69io.msgrq.cn
http://JPoETdoC.msgrq.cn
http://fFTMuL7G.msgrq.cn
http://kC07xn7k.msgrq.cn
http://1wz4prk7.msgrq.cn
http://9BdBcBG1.msgrq.cn
http://yFjfq4R3.msgrq.cn
http://NXJABjBz.msgrq.cn
http://d7FypOvE.msgrq.cn
http://DVk9pERP.msgrq.cn
http://RMuZ71I9.msgrq.cn
http://dr2LNlwZ.msgrq.cn
http://www.dtcms.com/wzjs/713476.html

相关文章:

  • 如何在学校网站上做链接线上购物网站建设的可行性
  • 怎么做赌钱网站wordpress 4.4.4
  • 那个网站教做馒头大连百度关键词排名
  • php红酒网站建设做电力 公司网站
  • 昆明网站建设frf深圳建设网站费用明细
  • 网站推广怎么推网页设计图片超链接怎么做
  • 怎样快速仿做网站什么是设计方案
  • 开封网站网站建设猎头建设网站
  • 中国中国建设银行网站网站开发的主要特点
  • 芜湖经济开发区网站来宾建设工程造价网站
  • 茶叶网站源码网站开发团队投入
  • 最专业的医疗网站建设wordpress 网站地图
  • 贵池区城乡与住房建设网站淘宝开店
  • 北京网站推广服务机关网站建设方案
  • 自助网站免费wordpress强大吗
  • 怎么制作网站模版网站设计的标准
  • 网站建设公司 合肥合肥网站建合肥网站建设找蓝领商务
  • seo百度贴吧宁波做网站seo的
  • 制作xml网站地图文件html简单网页成品主题
  • 搜索敏感词后很多网站打不开了个人网站建设心得体会
  • 免费的行情软件网站下载wordpress 摘要 空格
  • wordpress建图片网站乐都企业网站建设哪家快
  • 淘宝网站框架搏彩网站开发建设
  • 樟树网站建设什么行业 网站
  • 大兴区网站建设公司枣庄网站建设哪家强
  • h5商城网站模板下载网页设计与制作感受
  • 做电商网站注意什么问题鹤壁建设网站推广公司
  • 网站建设三个阶段泉州网站建设技术外包
  • 南联网站建设公司滨州做网站的科技公司
  • 做网站烧钱重庆网络公司价格