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

智能指针shared_ptr简介及小例子

shared_ptr是一种智能指针,用于处理动态分配的对象。它提供了一种引用计数的机制,当没有任何其他shared_ptr指向一个对象时,该对象将被自动删除。

shared_ptr的作用类似于常规指针,但有一些额外的功能。它能够记录有多少个shared_ptr共享同一个对象,这是通过引用计数实现的。当创建一个新的shared_ptr指向一个对象时,引用计数会增加;当一个shared_ptr被销毁或重置时,引用计数会减少;当引用计数为0时,该对象的内存将被自动释放。

shared_ptr是线程安全的,多个线程可以共享同一个shared_ptr对象,而不会导致数据竞争或不一致的状态。然而,如果多个shared_ptr指向同一个对象,并且这些shared_ptr在多个线程中被修改或销毁,则需要进行适当的同步以确保数据的一致性和正确性。

下面是一个简单的示例,展示了如何使用shared_ptr:
 

#include <iostream>  
#include <memory>  class MyClass {  
public:  MyClass(int value) : value_(value) {std::cout<<"MyClass 构造函数"<<std::endl;}  void printValue() { std::cout << "show "<<value_ << std::endl; }  
private:  int value_;  
};  int main() {  std::shared_ptr<MyClass> ptr1 = std::make_shared<MyClass>(42); std::cout << "1111111111"<< std::endl; std::shared_ptr<MyClass> ptr2 = ptr1;  ptr1->printValue();  // Output: 42  ptr2->printValue();  // Output: 42  ptr2.reset();  // ptr2->printValue(); ptr1->printValue();  // Output: 42  ptr1.reset();  // At this point, the object pointed to by ptr1 and ptr2 is deleted.  return 0;  
}

MyClass 构造函数
1111111111
show 42
show 42
show 42

在上面的示例中,我们创建了两个shared_ptr,它们指向同一个MyClass对象。当我们使用printValue()方法时,可以看到输出是42。然后,我们销毁了ptr2,但因为还有ptr1指向该对象,所以该对象不会被删除。最后,我们销毁了ptr1,此时引用计数变为0,该对象被自动删除。
 

http://www.lryc.cn/news/198540.html

相关文章:

  • 机器人精确移动包
  • 强化学习环境报错解决
  • Ganache本地测试网如何在远程环境中进行访问和操作
  • Kotlin中的函数分类(顶层、成员、局部、递归等)
  • 字符串排序程序
  • 功率放大器在材料测试中的应用有哪些
  • 汽车屏类产品(一):流媒体后视镜Camera Monitoring System (CMS)
  • 三元组(C++ 实现矩阵快速转置)
  • Apriori(关联规则挖掘算法)
  • new Object()到底占用几个字节
  • 瞬态抑制二极管TVS的工作原理?|深圳比创达电子EMC(上)
  • Nginx 同一端口 同时支持http与https 协议
  • 【Express】文件上传管理 multer 中间件
  • 性能监控软件是什么?有哪些优势?
  • 分布式事务及CAP和BASE顶底
  • Django REST Framework完整教程-认证与权限-JWT的使用
  • 领域内容第18名
  • [1024]程序员节 一晃6年过去了
  • 数据结构 | 构造哈夫曼树
  • 实验室烧杯可以用超声波清洗机吗
  • Unity之ShaderGraph如何实现UV抖动
  • #力扣:771. 宝石与石头@FDDLC
  • 【网络协议】聊聊拓扑网络结构与原理
  • uview表单 hooks
  • 车载视频如何转换视频格式
  • 虚拟音频设备软件 Loopback mac中文版软件介绍
  • Android SurfaceControlViewHost介绍及使用
  • 微信小程序开发(一)
  • MySQL数据库操作(创建、修改、删除、查询)
  • 【合宙Air700E/780E短信转发】短信转发移动联通 不要钉钉不要微信,转发自建服务器-傻瓜式搭建