C++智能指针的使用-shared_ptr详解

本文详细介绍了C++中的智能指针shared_ptr,包括其默认构造、其他构造方式,如make_shared、拷贝构造和与new的结合使用。同时,强调了shared_ptr的引用计数机制及其在内存管理中的作用,以及使用shared_ptr时需要注意的事项,如避免混合使用普通指针和智能指针,以及避免使用get初始化其他指针。
摘要由CSDN通过智能技术生成

介绍:

  • shared_ptr允许多个指针指向同一个对象,对象内存的释放交由智能指针自动释放。
  • shared_ptr维护者一个关联计数器,称为引用计数
  • 当对一个shared_ptr进行拷贝时,引用计数会加1;当对一个shared_ptr赋予一个新值或shared_ptr被销毁(局部的智能指针变量被销毁)时,引用计数减1
  • 当引用计数为0时,会自动调用delete或自定义内存释放函数释放内存
  • 释放内存时会调用对象的析构函数
  • 引入头文件:#include< memory>

1. 默认构造方式

  • shared_ptr< T> sp;
  • 默认初始化的智能指针保存的是一个空指针
  • 智能指针的使用方式和普通指针类似;解引用一个智能指针放回它指向的对象。

示例:

shared_ptr<int> p1;   // 指向int的智能指针,默认初始化为空指针
shared_ptr<string> p2;   // 指向string的智能指针,默认初始化为空指针

2. 其他构造方式

默认构造方式只能得到一个空的智能指针,shared_ptr提供了多种其他的构造方式,包括:使用make_shared函数拷贝构造与new结合使用

(1)make_shared函数

  • 使用make_shared函数初始化一个智能指针是最安全的分配和使用动态内存的方法
  • 使用时必须指定要创建对象的类型
  • make_shared(args):返回一个shared_ptr,指向一个动态分配的类型为T的对象。使用args初始化此对象
  • args要与T类型中的某个构造函数相匹配,make_shared初始化是会调用该类型的对应构造函数;若args为空,则对象进行值初始化
shared_ptr<int> p1 = make_shared<int>(4);   //指向一个int的值为4的shared_ptr

shared_ptr<string> p2 = make_shared<string>(4, 's');   // 会调用string(4, 's'),p2指向一个值为"ssss"的string对象

shared_ptr<int> p3 = make_shared<int>(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值