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

关于网站集约化建设的意见青岛做网站公司

关于网站集约化建设的意见,青岛做网站公司,佛山网络公司排名前十,工信部icp备案介绍 shared_ptr是一种智能指针(smart pointer),作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting),比如我们把只能指针赋值给另外一个对象,那么对象多了一个智能指针指向它,所以这个时候引用计数…

介绍

shared_ptr是一种智能指针(smart pointer),作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting),比如我们把只能指针赋值给另外一个对象,那么对象多了一个智能指针指向它,所以这个时候引用计数会增加一个,我们可以用shared_ptr.use_count()函数查看这个智能指针的引用计数。

在这里插入图片描述
下面放上c++参考手册的介绍:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
具体对应模块参考链接:https://zh.cppreference.com/w/cpp/memory/shared_ptr

示例:

#include <iostream>
#include <memory>   //使用shared_ptr需要include它int main() {//通过make_shared创建shared_ptrstd::shared_ptr<int> p1 = std::make_shared<int>();*p1 = 78;std::cout << "p1 = " << *p1 << std::endl;//查看引用计数std::cout << "p1 Reference count = " << p1.use_count() << std::endl;//第二个shared_ptr也将在内部指向相同的指针//这将会使引用计数变为2std::shared_ptr<int> p2(p1);//查看引用计数std::cout << "p2 Reference count = " << p2.use_count() << std::endl;std::cout << "p1 Reference count = " << p1.use_count() << std::endl;//比较智能指针if (p1 == p2) {std::cout << "p1 and p2 are pointing to same pointer\n";}std::cout << "Reset p1" << std::endl;//重置shared_ptr,在这种情况下,其内部不会指向内部的任何指针//因此其引用计数将会变为0p1.reset();std::cout << "p1 Reference Count = " << p1.use_count() << std::endl;//重置shared_ptr,在这种情况下,其内部将会指向一个新的指针//因此其引用计数将会变为1p1.reset(new int(11));std::cout << "p1 Reference Count = " << p1.use_count() << std::endl;//分配nullptr将取消关联指针并使其指向空值p1 = nullptr; std::cout << "p1 Reference Count = " << p1.use_count() << std::endl;if (!p1) {std::cout << "p1 is NULL" << std::endl;}return 0;
}

输出:

p1 = 78
p1 Reference count = 1
p2 Reference count = 2
p1 Reference count = 2
p1 and p2 are pointing to same pointer
Reset p1 
p1 Reference Count = 0
p1  Reference Count = 1
p1  Reference Count = 0
p1 is NULL

下面讨论下怎样使用 std::shared_ptr自定义Deleter.
当一个shared_ptr对象超出作用域时,其析构函数被调用,在析构函数中,将其引用计数减1,如果引用计数的值变为0,则删除关联的原始指针。

要删除析构函数中的内部原始指针,默认情况下,shared_ptr调用delete()函数,即

delete Pointer;

但是,我们在析构函数中并不总是要使用delete函数,还可能有其他的需求。

如果shared_ptr指向一个数组而不是一个简单的指针

std::shared_ptr<int> p3(new int[12]);

在其析构函数中,shared_ptr将会调用 delete函数来删除int数组,而正确的方式是使用 delete []

增加定制deleter到shared_ptr
在这种情况下,我们可以将一个回调传递给shared_ptr的构造函数,该构造函数将会在其析构函数中被调用

定制Deleter作为函数指针

//函数调用接收到的指针上的delete[]
void deleter(Sample *x){std::cout<<"DELETE FUNCTION CALLED\n"delete[] x;
}

在shared_ptr的构造函数中传递函数指针,以提供自定义的deleter

//使用定制deleter创建sharedptr
std::shared_ptr<Sample> p3(new Sample[12], deleter);

完整的例子如下:

#include <iostream>
#include <memory>struct Sample {Sample() {std::cout << "CONSTRUCTOR\n";}~Sample() {std::cout << "DESTRUCTOR\n";}
};//在接收到的指针上调用delte[]的函数
void deleter(Sample* x) {std::cout << "DELETER FUNCTION CALLED\n";delete[] x;
}int main() {//使用定制的deleter创建shared_ptrstd::shared_ptr<Sample> p3(new Sample[12], deleter);return 0;
}

输出:

CONSTRUCTOR
CONSTRUCTOR
CONSTRUCTOR
CONSTRUCTOR
CONSTRUCTOR
CONSTRUCTOR
CONSTRUCTOR
CONSTRUCTOR
CONSTRUCTOR
CONSTRUCTOR
CONSTRUCTOR
CONSTRUCTOR
DELETER FUNCTION CALLED
DESTRUCTOR
DESTRUCTOR
DESTRUCTOR
DESTRUCTOR
DESTRUCTOR
DESTRUCTOR
DESTRUCTOR
DESTRUCTOR
DESTRUCTOR
DESTRUCTOR
DESTRUCTOR
DESTRUCTOR
http://www.yayakq.cn/news/335834/

相关文章:

  • 山西网站建设推广购物车按钮颜色wordpress
  • 黄石做网站公司网络货运怎么做的
  • 对文化传播网站建设的建议中国建筑官网测评
  • 网站建设的报告大庆seo推广
  • 上海做网站多少费用广州软件开发工资一般多少
  • 传奇背景图网站怎么做刷手机网站关键词
  • 建行官方网站 - 百度有关网站开发的论文
  • 网站怎么做伪静态做电商网站一般需要什么流程图
  • 湛江手机网站制作网站开发合同支付
  • 网站分析怎么做的网站开发主要步骤
  • 微网站生成app世界购物平台排行榜
  • 网站锚文本延吉网站制作
  • 学生网站建设首页软件详细设计文档
  • 网络网站租邯郸市博物馆
  • 温州建站费用用什么网站做问卷
  • 做爰网站做网站一定要有营业执照吗
  • 成品网站 修改首页网站app微信三合一
  • 小米网站建设案例山西网站制作工具
  • 访问失效链接 如何删除 网站维护文章网站后台管理系统
  • phpcms 移动网站模板深圳做自适应网站制作
  • 做网站软件j做天猫网站设计难吗
  • 优质的武进网站建设昆明网站搜索优化
  • 找代理做网站多少钱网站建设哪里比较好
  • 网站建设报价单 excel无锡品牌网站建设
  • 网站统计系统 怎么做重庆做网站的
  • 海淀区手机网站制作服务沧州网站建设培训学校
  • 来年做那个网站致富网片的重量计算公式
  • 建设网站必须要服务器C4D有哪些做模型的网站
  • 广州微网站建设咨询上海发布首页
  • 泉州建设公司网站网站商城支付宝开通怎么做