std::shared_ptr简介

翻译 2015年11月18日 22:23:10

原文: http://www.cplusplus.com/reference/memory/shared_ptr/


template<class T> class shared_ptr;


共享指针(shared pointer)管理指针的存储,提供有限的垃圾回收的功能,可能会与其他对象共享此指针管理。


shared_ptr类型的对象具有获得一个指针所有权的能力,并且能分享此所有权: 一旦取得了所有权,当最后一个所有者释放所有权的时候,这些所有者就要负责删除指针。


一旦shared_ptr对象被销毁(destroyed) ,或者一旦它们的值通过赋值操作符或显式调用shared_ptr::reset而被改变的时候,share_ptr对象就释放了对原来对象的所有权。一旦所有的shared_ptr对象(共享一个指针的所有权的对象)都释放了所有权,该被管理的对象就会被删除(一般通过调用::delete来删除),但(如需不同的删除方法)一个不同的deleter可能在构造函数中被指定。


shared_ptr对象可以仅仅通过复制它们的值来共享所有权:如果2个shared_ptr被构造自同一个非shared_ptr指针,它们两个都会拥有这个指针而并不share它。这会导致潜在的访问问题:当这2个shared_ptr其中之一release了这个指针(即删除了所指对象)时,另一个shared_ptr就会指向一个无效的地址。


另外,shared_ptr对象可以在共享某个指针的所有权的同时,其实指向的时另一个对象。这个能力被称为别名(aliasing),它一般被用来指向成员对象,但拥有这些成员对象所属的对象。因此,一个shared_ptr其实和以下2个指针相关:
- a stored pointer,就是所指向的指针,也就是用operator *来解引用的那个指针,也就是用get()得到的那个指针;
- An owned pointer(可能被共享的),也就是这些所有者(ownership group)可以去deleting的指针,也就是对其进行使用计数的那个指针。


一般来说,stored pointer和owned pointer指向相同的东西,但是alias shared_ptr对象(用alias constructor构建的对象和它们的copy)的这2个指针却可能指向不同的对象。


一个并不拥有任何指针的shared_ptr被称作empty shared_ptr. 
一个什么对象都不指向的shared_ptr被称作 null shared_ptr,并且不能被解引用(dereferenced). 
一个empty shared_ptr不一定是一个null shared_ptr,反之亦然。


通过operator *和operator ->以访问所指向的对象,shared_ptr复制了有限的指针功能。因为安全的原因,shared_ptr对象不提供指针运算。


一个相关的类,weak_ptr,能够和shared_ptr对象共享指针却并不拥有它们。

举报

相关文章推荐

Effective C++之std::tr1::shared_ptr的使用

Effective C++之std::tr1::shared_ptr的使用

std::tr1::shared_ptr 使用的一点体会

转载于:http://www.cppblog.com/sleepwom/archive/2010/09/03/125832.html 在 c++ 98 里面只有一种智能指...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

C++ std::tr1::shared_ptr使用

看《effective c++》,作者一直强调用std::tr1::shared_ptr,比起auto_ptr好多了。 shared_ptr采用引用计数,多个指针可以指向同一个对象;auto_p...

C++ std::tr1::shared_ptr使用说明

1. 介绍  shared_ptr 是通过指针保持某个对象的共享拥有权的智能指针。若干个 shared_ptr 对象可以拥有同一个对象;最后一个指向该对象的 shared_ptr 被销毁或重置时,该对...

浅析std::shared_ptr::owner_before

之前在学习C++标准库(C++11)的shared_ptr时,遇到一个成员函数owner_before,一时就懵了,后来查找相关资料,才初步了解该成员函数。 先来看看cppreference上面对于该...

C++11 智能指针之 std::shared_ptr 初级学习

shared_ptr概念 shared_ptr基于“引用计数”模型实现,多个shared_ptr可指向同一个动态对象,并维护了一个共享的引用计数器,记录了引用同一对象的shared_ptr实例的数量。...

让std::shared_ptr变成动态类型指针

作者:dlite@163.com                c++11中引入的shared_ptr可以封装了线程安全共享指针技术,给开发人员带来了很大方便...
  • DLite
  • DLite
  • 2012-09-23 22:15
  • 6054

Effective Modern C++ 条款19 用std::shared_ptr管理共享所有权的资源

Effective Modern C++ 条款19

智能指针 std::auto_ptr 和 shared_ptr

转载:http://blog.sina.com.cn/s/blog_508938e10100f12x.html auto_ptr 类可以用于管理由 new 分配的单个对象,但是无法管理动态分配的...

Item19 Use std::shared_ptr for shared-ownership resource management

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 在上一篇文章中讨论了std:...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)