【C++】share

07-16 1749阅读

一、share_ptr 的简单使用

1.1、基本用法

从较浅的层面看,智能指针是利用了一种叫做RAII(资源获取即初始化)的技术对普通的指针进行封装,这使得智能指针实质是一个对象,行为表现的却像一个指针。

智能指针的作用是防止忘记调用delete释放内存和程序异常的进入catch块忘记释放内存。另外指针的释放时机也是非常有考究的,多次释放同一个指针会造成程序崩溃,这些都可以通过智能指针来解决。

【C++】share

智能指针的行为类似于一个常规指针,与常规指针之间重要的区别就是它负责自动释放所管理的资源,share_ptr 使用引用计数,允许多个 share_ptr 指向同一资源,每多一个 share_ptr 指向该资源,share_ptr 的引用计数就 +1 ,减为0时表示没有 share_ptr 对该资源进行引用了,就会释放所指向的资源。share_ptr 内部中的引用计数是线程安全的,但是引用的资源不是线程安全的。

1.2、初始化 

  1. 裸指针直接初始化,但不能通过隐式转换来构造,因为 share_ptr 构造函数被声明为 explicit
  2. 允许移动构造与拷贝构造
  3. 通过 make_share 构造
#include 
#include 
class test {};
int main()
{
  std::shared_ptr f(new test());              // 裸指针直接初始化
  //std::shared_ptr f1 = new test();            // Error,explicit禁止隐式初始化
  std::shared_ptr f2(f);                       // 拷贝构造函数
  std::shared_ptr f3 = f;                      // 拷贝构造函数
  f2 = f;                                             // copy赋值运算符重载
  std::cout 

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]