C++智能指针shared_ptr

 更新时间:2022年03月09日 11:49:05   作者:机器学习入坑者  
这篇文章主要介绍了C++智能指针shared_ptr,C++11中包括shared_ptr在内的多种指针,都是模板类型,意味着使用者可以指定想要操作的类型下文从shared_ptr创建方式展开全文,介绍详细具有一的参考价值,需要的小伙伴可以参考一下

1、什么是shared_ptr?

C++11中包括shared_ptr在内的多种指针,都是模板类型,意味着使用者可以指定想要操作的类型。

创建shared_ptr的方式如下:

shared_ptr<int>p1; // p1=NULL

2、shared_ptr支持哪些操作?

  • 创建:shared_ptr p = make_shared
  • 判断是否为NULL:if(p)
  • 获取指向对象
  • 等等

3、如何创建shared_ptr的实例?

通过C++的标准库中make_shared()函数动态的申请对象内存,并返回此对象的shared_ptr

shared_ptr<int>p1; 
p1 = make_shared<int>(666);

4、什么是shared_ptr的引用计数?如何查看?

由于允许多个shared_ptr指向同一个对象,所以C++支持“引用计数”,也就是统计同一对象被多少个shared_ptr所指向。当某对象的shared_ptr增加时,引用计数随之加一;当某对象的shared_ptr减少时,引用计数随之减一。

shared_ptr对象的use_count的函数成员返回引用计数值:

shared_ptr<int>p2, p3;
p2 = p1;
p3 = p1;
// p1,p2,p3指向同一对象,所以引用技术值为3
cout << p2.use_count() << endl;

5、shared_ptr何时释放其所指向的对象?

当同一对象的引用计数变为0时,此对象所占空间就会被释放,

比如函数调用结束时:

class SP {
public:
    ~SP() { cout << "Destroy SP" << endl; }
};

void auto_destroy() {
    // 创建SP类型的共享智能指针
    shared_ptr<SP>p1 = make_shared<SP>();
}

当调用auto_destroy()函数结束时,不需要手动的释放shared_ptr所指向的内存空间,系统会自动的销毁SP对象。

到此这篇关于C++智能指针shared_ptr的文章就介绍到这了,更多相关C++指针shared_ptr内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++ 自由存储区是否等价于堆你知道吗

    C++ 自由存储区是否等价于堆你知道吗

    自由存储是C++中通过new与delete动态分配和释放对象的抽象概念,而堆(heap)是C语言和操作系统的术语,是操作系统维护的一块动态分配内存
    2021-08-08
  • C++实现大数相乘的算法

    C++实现大数相乘的算法

    这篇文章主要为大家详细介绍了C++实现大数相乘的算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • C语言实现分治法实例

    C语言实现分治法实例

    这篇文章主要为大家详细介绍了C语言实现分治法的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • swift Character类型详解及实例

    swift Character类型详解及实例

    这篇文章主要介绍了 swift Character类型详解及实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • Cocos2d-x保存用户游戏数据之XML文件是否存在问题判断方法

    Cocos2d-x保存用户游戏数据之XML文件是否存在问题判断方法

    这篇文章主要介绍了Cocos2d-x保存用户游戏数据之XML文件是否存在问题判断方法,请注意代码中包含大量注释,需要的朋友可以参考下
    2014-09-09
  • 详解c++良好的编程习惯与编程要点

    详解c++良好的编程习惯与编程要点

    c++语言的灵活是建立在对编程者个人的编程素质的严格要求基础上的,好的C++编程习惯能避免很多问题。没有好的编程习惯,极有可能编写一行代码,编译器能报十几个错误,而且就算编译通过了,将来在运行过程中也会有很多莫名奇妙的问题
    2021-06-06
  • 数组循环移位操作实例

    数组循环移位操作实例

    这篇文章介绍了数组循环移位操作实例,有需要的朋友可以参考一下
    2013-09-09
  • C语言根据协议分割获取字符串单元的实现代码

    C语言根据协议分割获取字符串单元的实现代码

    今天小编就为大家分享一篇关于C语言根据协议分割获取字符串单元的实现代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • C语言结构体指针的具体使用

    C语言结构体指针的具体使用

    结构体指针是一种非常有用的数据类型,它可以让我们更方便地操作结构体,本文主要介绍了C语言结构体指针的具体使用,非常具有实用价值,需要的朋友可以参考下
    2023-05-05
  • C++ Log日志类轻量级支持格式化输出变量实现代码

    C++ Log日志类轻量级支持格式化输出变量实现代码

    这篇文章主要介绍了C++ Log日志类轻量级支持格式化输出变量实现代码,需要的朋友可以参考下
    2019-04-04

最新评论