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

工作准备区域的组成包括电脑系统优化软件排行榜

工作准备区域的组成包括,电脑系统优化软件排行榜,100个新公司起名,重庆简约型网站开发价格系列文章目录 【C11】智能指针与动态内存 文章目录 系列文章目录简介一、头文件二、初始化1. make_shared2. 拷贝和赋值 三、实例 简介 shared_ptr 是一个类的模板,它使用引用计数的方式来管理一个动态分配的内存资源。shared_ptr 需要一个动态分配的对象时&#…

系列文章目录

【C++11】智能指针与动态内存


文章目录

  • 系列文章目录
    • 简介
    • 一、头文件
    • 二、初始化
      • 1. make_shared
      • 2. 拷贝和赋值
    • 三、实例


简介

shared_ptr 是一个类的模板,它使用引用计数的方式来管理一个动态分配的内存资源。shared_ptr 需要一个动态分配的对象时,会在堆上分配一块内存来存储该对象,并维护一个引用计数。

shared_ptr允许多个shared_ptr指向同一个对象,通过引用计数来跟踪有多少个shared_ptr指向同一个对象。每次创建一个新的shared_ptr指向同一个对象时,引用计数增加1。当一个shared_ptr离开作用域或被重置时,引用计数减少1。当引用计数变为0时,shared_ptr会自动删除所指向的对象并释放内存。


一、头文件

本文出现的关于shared_ptr的方法都包含在此头文件中

#include <memory>

二、初始化

1. make_shared

最安全方法是调用make_shared的标准库函数。同时引用计数从0到1。

// 指向一个值为默认值的int的shared_ptr:0
std::shared_ptr<int> p1 = make_shared<int>();
// 指向一个值为4的int的shared_ptr
std::shared_ptr<int> pt2 = make_shared<int>(4);
// 指向一个值为"555555"的string的shared_ptr
std::shared_ptr<std::string> p3= make_shared<string>(6, '5');

通常用定义一个auto对象来保存make_shared结果

// 指向一个值为默认值的int的shared_ptr:0
auto p4 = make_shared<int>();

2. 拷贝和赋值

通过拷贝和赋值也可以初始化。

auto p = make_shared<int>(4);   // p指向的引用对象只有p一个引用者,此对象引用计数为1
auto q(p);                      // p和q指向的相同对象,此对象引用计数递增变为2auto r = make_shared<int>(4);   // r指向的引用对象只有r一个引用者,引用计数为1
auto r = q;                     // 给r赋值,令它指向另一个地址// 递增q指向的对象的引用计数,此对象引用计数变为3// 递减r原来指向的对象的引用计数,此引用计数变为0,自动释放

三、实例

#include <iostream>
#include <memory>   // for std::shared_ptr and std::unique_ptr  class Person
{
public:Person(std::string name, int age) :m_name(name), m_age(age){std::cout << "Create Person" << " " << m_name.c_str() << " " << m_age << std::endl;};~Person(){std::cout << "Destroy Person" << " " << m_name.c_str() << " " << m_age << std::endl;};private:std::string m_name;int m_age;
};int main()
{// 离开作用域场合{// 创建shared_ptrstd::shared_ptr<Person> sharedPtr = std::make_shared<Person>("Tom", 10);// 输出引用计数( 结果:1)std::cout << "SharedPtr uses" << " " << sharedPtr.use_count() << std::endl;{// sharedPtr2和sharedPtr指向同一个对象,此对象的引用计数递增,变为2std::shared_ptr<Person> sharedPtr2 = sharedPtr;   // sharedPtr2不会调用构造函数,因为这个指针和sharedPtr指向的是同一个内存地址// 输出引用计数( 结果:2)std::cout << "SharedPtr uses" << " " << sharedPtr.use_count() << std::endl;}// 当sharedPtr2离开作用域时,其指向对象的引用计数递减,变为1(此时还有sharedPtr指向该对象)。 std::cout << "SharedPtr uses" << " " << sharedPtr.use_count() << std::endl;}// 当sharedPtr离开作用域时,引用计数递减变为0。然后析构函数自动被调用,析构函数会检查 shared_ptr 的引用计数,如果计数为 0,则调用 reset 函数来释放对象(不用显示调用),并将指针设为null。std::cout << "Hello World!\n";return 0;
}
http://www.khdw.cn/news/15912.html

相关文章:

  • 沈阳建委网站中山网站建设
  • 用什么做网站后台有没有免费的写文案的软件
  • 网址格式刷神马seo排名首页排名
  • 云南网站建设模块如何做电商赚钱
  • 内网电脑做网站服务器互联网项目推广是什么
  • 株洲做网站的公司舆情分析报告范文
  • 外贸流程中有哪些主体单位seo排名需要多少钱
  • 免费b2b平台推广有询盘吗seo优化百度技术排名教程
  • 北京网站seo优化排名公司河南网站设计
  • 搭建网站需要什么seo关键词优化如何
  • 广东省著名商标在什么网站做山东疫情最新消息
  • 有什么网站可以免费搭建网址引流最好的推广方法
  • qq空间做淘宝客网站使用最佳搜索引擎优化工具
  • 南阳建设局网站搜索网站有哪几个
  • 廊坊市网站建设网站关键字优化公司
  • 做it的网站徐州seo代理计费
  • 视频网站做app搜索引擎排名优化seo
  • 网站做多个语言有什么好处关键词挖掘工具有哪些
  • 襄阳大摩网站建设seo外链优化
  • 个人服务器搭建做网站北京网站seo哪家公司好
  • 有关外贸的网站有哪些内容网站建设制作免费
  • 网站运营报告企业网站类型有哪些
  • 凡科网之前做的网站在哪看安卓优化大师新版
  • 房产中介哪家口碑比较好济南seo整站优化价格
  • 微信连接微网站吗网站开发培训
  • 域名注册好怎么建设网站网站cms
  • 企业网站建设可行分析百度一下你就知道官网
  • 宁晋网站建设代理价格seo搜索引擎优化实战
  • wordpress可以做博客么郑州seo优化哪家好
  • php网站开发实例教程码源输入关键词进行搜索