首页 > 编程语言 >c++ share ptr的使用

c++ share ptr的使用

时间:2022-10-08 20:56:30浏览次数:89  
标签:对象 object share c++ shared pointer ptr 指针

关于share_ptr cppreferrence的介绍

std::shared_ptr

std::shared_ptr  
Defined in header <memory>    
template< class T > class shared_ptr;   (since C++11)
     

std::shared_ptr is a smart pointer that retains shared ownership of an object through a pointer. Several shared_ptr objects may own the same object.

1.The object is destroyed and its memory deallocated when either of the following happens:

  • the last remaining shared_ptr owning the object is destroyed;
  • the last remaining shared_ptr owning the object is assigned another pointer via operator= or reset().

2. The object is destroyed using delete-expression or a custom deleter that is supplied to shared_ptr during construction.

3. A shared_ptr can share ownership of an object while storing a pointer to another object. This feature can be used to point to member

objects while owning the object they belong to. The stored pointer is the one accessed by get(), the dereference and the comparison operators.

The managed pointer is the one passed to the deleter when use count reaches zero.

shared_ptr may also own no objects, in which case it is called empty (an empty shared_ptr may have a non-null stored pointer if the aliasing constructor was used to create it).

All specializations of shared_ptr meet the requirements of CopyConstructibleCopyAssignable, and LessThanComparable and are contextually convertible to bool.

All member functions (including copy constructor and copy assignment)

can be called by multiple threads on different instances of shared_ptr

 without additional synchronization even if these instances are copies and share ownership of the same object.

If multiple threads of execution access the same instance of shared_ptr without synchronization and any

of those accesses uses a non-const member function of shared_ptr then a data race will occur;

the shared_ptr overloads of atomic functions can be used to prevent the data race.

shared_ptr是一个智能指针,它通过指针保留对象的共享所有权。多个shared_ptr对象可以拥有同一个对象。当发生以下任何一种情况时,对象将被销毁并释放其内存:

拥有对象的最后一个剩余的shared_ptr被销毁;

拥有对象的最后一个shared_ptr通过operator=或reset()分配另一个指针。

使用delete-expression或在构造过程中提供给shared_ptr的自定义删除器销毁对象。

shared_ptr可以共享一个对象的所有权,同时存储指向另一个对象的指针。此特性可用于在拥有成员对象所属的对象时指向成员对象。存储的指针是由get()、解引用和比较操作符访问的指针。托管指针是在使用计数为零时传递给删除器的指针。

shared_ptr也可能不拥有对象,在这种情况下它被称为空的(如果使用别名构造函数创建空的shared_ptr,则空的shared_ptr可能有一个非空的存储指针)。

shared_ptr的所有专门化都满足CopyConstructible、CopyAssignable和LessThanComparable的要求,并且可以上下文转换为bool。

所有成员函数(包括复制构造函数和复制赋值)都可以由shared_ptr的不同实例上的多个线程调用,而无需额外的同步,即使这些实例是同一个对象的副本并共享其所有权。如果多个执行线程不同步地访问shared_ptr的同一个实例,并且其中任何一个访问都使用了shared_ptr的非const成员函数,那么就会发生数据竞争;原子函数的shared_ptr重载可用于防止数据竞争。

 

 

标签:对象,object,share,c++,shared,pointer,ptr,指针
From: https://www.cnblogs.com/codeAndlearn/p/16770168.html

相关文章

  • 无sudo权限解决Anaconda libstdc++.so.6: version `GLIBCXX_3.4.20' not found
    查找包含`GLIBCXX_3.4.20'的libstdc++find/-name"libstdc++.so*"///为根目录下搜索,可以替换为用户指定路径根据上述指令显示的文件,选择一个最新版本的查看是否......
  • C++——网络编程(一)
    一、网络结构C/SClient-Server结构,Server负责管理数据,Client负责与用户交互。Server会成为性能的瓶颈。B/SBrowser/Server,这种模式......
  • c++ bitset用法
    一、声明:bitset<N>f;//N是二进制长度,这时每一位都是0存储数字的二进制:bitsetname(num);//定义长度为N的二进制数组,命名为name,将数字num的二进制存到其中;b......
  • C/C++简单音乐播放器系统
    C/C++简单音乐播放器系统程序设计题1:简单音乐播放器系统出题人:吴敏面向专业:计算机科学与技术难度等级:41问题描述编写一个简单音乐播放器软件,实现歌单文件的浏览,点......
  • C++需要注意的知识
    类1、2、3、4原文链接:https://blog.csdn.net/fjhugjkdsd/article/details/1052816511.什么是类的6个默认成员函数?如果一个类中什么成员都没有,简称为空类。任何一个类在......
  • C++判断文件是否存在的方法汇总
    C++判断文件是否存在的方法汇总1.使用boost判断文件是否存在std::stringfile_path="file_name";if(!boost::filesystem::exists(file_path)){std::cout<<......
  • 为python编译C++模块时一定要注意的事情—————不要在anaconda环境下使用cmake来编
    平时搞python的人很多都会有安装C++扩展模块的需求,而往往这些C++模块都是使用CMAKE做编译配置的,但是如果你这时候shell环境是使用anaconda的话,那么cmake默认调用的GCC和G++......
  • C++11特性(上)
    写在前面今天我们谈谈C++的一些语法,这些语法是C++11标准下新增的.有的人感觉学C++很难,那么C++11标准出来之后你会发现学习的成本又增加了.C++11增添了很多特性,有有用的,......
  • C++ 右值引用与 const 关键字
    C++11新增了另一种引用:右值引用(rvaluereference),这种引用可指向右值,是使用&&声明的。使用右值引用可以减少复制操作,延长临时对象生命周期,提升程序性能。它一般被用来实......
  • C++ write file hugely
    //ConsoleApplication1.cpp:Thisfilecontainsthe'main'function.Programexecutionbeginsandendsthere.//#pragmaonce#pragmacomment(lib,"rpcrt4.lib"......