服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++智能指针shared_ptr

C++智能指针shared_ptr

2022-10-14 12:56机器学习入坑者 C/C++

这篇文章主要介绍了C++智能指针shared_ptr,C++11中包括shared_ptr在内的多种指针,都是模板类型,意味着使用者可以指定想要操作的类型下文从shared_ptr创建方式展开全文,介绍详细具有一的参考价值,需要的小伙伴可以参考一下

C++智能指针shared_ptr

1、什么是shared_ptr?

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

创建shared_ptr的方式如下:

?
1
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

?
1
2
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的函数成员返回引用计数值:

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

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

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

比如函数调用结束时:

?
1
2
3
4
5
6
7
8
9
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内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://zhuanlan.zhihu.com/p/126563935

延伸 · 阅读

精彩推荐
  • C/C++C语言源码实现停车场管理系统

    C语言源码实现停车场管理系统

    这篇文章主要为大家详细介绍了C语言源码实现停车场管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    jqhsdtz5702021-08-11
  • C/C++详解c++ 继承

    详解c++ 继承

    这篇文章主要介绍了c++ 继承的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...

    菜鸟教程4802021-09-16
  • C/C++C语言实现线索二叉树的定义与遍历示例

    C语言实现线索二叉树的定义与遍历示例

    这篇文章主要介绍了C语言实现线索二叉树的定义与遍历,结合具体实例形式分析了基于C语言的线索二叉树定义及遍历操作相关实现技巧与注意事项,需要的朋...

    PHP开发学习门户9062021-05-14
  • C/C++C++ 中类的拷贝、赋值、销毁的实例详解

    C++ 中类的拷贝、赋值、销毁的实例详解

    这篇文章主要介绍了C++ 中类的拷贝、赋值、销毁的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下...

    C++教程网7282021-06-03
  • C/C++C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别

    C++中的局部变量、全局变量、局部静态变量、全局静态变量的区

    本文主要介绍了C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别。具有很好的参考价值,下面跟着小编一起来看下吧...

    BrokenHeart10182021-04-30
  • C/C++C++异常处理入门(try和catch)

    C++异常处理入门(try和catch)

    C++ 提供了异常机制,让我们能够捕获运行时错误,本文就详细的介绍了C++异常处理入门,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    C语言中文网5782021-12-13
  • C/C++c++11 atomic的使用详解

    c++11 atomic的使用详解

    这篇文章主要介绍了c++11 atomic的使用详解,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下...

    后端技术小屋6492021-10-25
  • C/C++C语言 动态内存分配的详解及实例

    C语言 动态内存分配的详解及实例

    这篇文章主要介绍了C语言 动态内存分配的详解及实例的相关资料,需要的朋友可以参考下...

    CrazyDiode10592021-04-18