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. Severalshared_ptr
objects may own the same object; the object is destroyed when the last remaining shared_ptr
pointing to it is destroyed or reset. The object is destroyed using delete-expression or a custom deleter that is supplied toshared_ptr
during construction.
A shared_ptr
may also own no objects, in which case it is called empty.
shared_ptr
meets the requirements of CopyConstructible
and CopyAssignable
.
Member types
Member type | Definition |
element_type | T |
Member functions
constructs new shared_ptr (public member function) |
|
destructs the owned object if no more shared_ptr s link to it (public member function) |
|
assigns the shared_ptr (public member function) |
|
Modifiers |
|
replaces the managed object (public member function) |
|
swaps the managed objects (public member function) |
|
Observers |
|
returns a pointer to the managed object (public member function) |
|
dereferences pointer to the managed object (public member function) |
|
returns the number of shared_ptr objects referring to the same managed object (public member function) |
|
checks whether the managed object is managed only by the current shared_ptr instance (public member function) |
|
checks if there is associated managed object (public member function) |
|
provides owner-based ordering of shared pointers (public member function) |
Non-member functions
creates a shared pointer that manages a new object (function template) |
|
creates a shared pointer that manages a new object allocated using an allocator (function template) |
|
applies static_cast, dynamic_cast or const_cast to the type of the managed object (function template) |
|
returns the deleter of specified type, if owned (function template) |
|
compares with another shared_ptr or with nullptr (function template) |
|
outputs the value of the managed pointer to an output stream (function template) |
|
(C++11)
|
specializes the std::swap algorithm (function template) |
specializes atomic operations (function template) |
Helper classes
(C++11)
|
hash support for std::shared_ptr (class template specialization) |
Implementation notes
In a typical implementation, std::shared_ptr holds only two pointers:
- a pointer to the referenced object
- a pointer to control block
Where the control block is a dynamically-allocated object that holds:
- a pointer to the managed object or the managed object itself
- the deleter
- the allocator
- the number of
shared_ptr
s that own the managed object - the number of
weak_ptr
s that refer to the managed object
When shared_ptr
is created by calling std::make_shared or std::allocate_shared, the control block holds the managed object directly, as a data member. When shared_ptr
is created by calling a constructor, a pointer is stored.
The pointer held by the shared_ptr
directly is the one returned by get()
, while the pointer/object held by the control block is the one that will be deleted when the number of shared owners reaches zero: these pointers are not necessarily equal.
The destructor of shared_ptr
decrements the number of shared owners of the control block, and if that reaches zero, the control block calls the destructor of the managed object, but the control block does not deallocate itself until thestd::weak_ptr counter reaches zero as well.
这个360还不让人复制,直接把JS禁掉,以前学的不是白学的
std::shared_ptr(二)的更多相关文章
- tolua 转换 std::shared_ptr
tolua 转换 std::shared_ptr 自从c++11以后std::shared_ptr几乎是比用的东西,经常会遇到类似如下应用 std::shared_ptr<Tst_ShareTe ...
- std::shared_ptr
在std::shared_ptr被引入之前,C++标准库中实现的用于管理资源的智能指针只有std::auto_ptr一个而已.std::auto_ptr的作用非常有限,因为它存在被管理资源的所有权转移 ...
- (译+原)std::shared_ptr及std::unique_ptr使用数组
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5462363.html 参考网址: http://stackoverflow.com/questions ...
- std::shared_ptr<void>的工作原理
前戏 先抛出两个问题 如果delete一个指针,但是它真实的类型和指针类型不一样会发生什么? 是谁调用了析构函数? 下面这段代码会发生什么有趣的事情? // delete_diff_type.cpp ...
- 巧用std::shared_ptr全局对象释放单例内存
巧用std::shared_ptr 单例的使用相对比较广泛,但是需要在程序退出前调用它的析构函数对数据进行释放,常规做法是在main函数末尾进行释放工作, 但是这样相对比较繁琐,因此便有了利用全局变量 ...
- Item 20: 使用std::weak_ptr替换会造成指针悬挂的类std::shared_ptr指针
本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 矛盾的是,我们很容易就能创造出一个和std::shared_ptr ...
- std::shared_ptr 和普通指针的转换
相互转化见示例 struct test { int num; string name; }; test* pTest = new test(); std::shared_ptr<test> ...
- C++11 std::shared_ptr总结与使用
最近看代码,智能指针用的比较多,自己平时用的少,周末自己总结总结.方便后续使用. std::shared_ptr大概总结有以下几点: (1) 智能指针主要的用途就是方便资源的管理,自动释放没有指针引用 ...
- std::shared_ptr之deleter的巧妙应用
本文由作者邹启文授权网易云社区发布. std::shared_ptr 一次创建,多处共享,通过引用计数控制生命周期. 实例 在邮箱大师PC版中,我们在实现搜索时,大致思路是这样的: 每一个账号都有一个 ...
随机推荐
- Kakfa分布式集群搭建
本位以最新版本kafka_2.11-0.10.1.0版本讲述分布式kafka集群环境的搭建过程.服务器列表: 172.31.10.1 172.31.10.2 172.31.10.3 1.下载kafka ...
- 泛型委托 Predicate/Func/Action
Predicate 泛型委托 表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素.看看下面它的定义: // Summar ...
- 学习bash
工作8年,前6年基本是Windows环境下,也就是个鼠标党:两年前换工作开始用linux,也就开始了领略了命令行的强大,无论是直接在命令行组合命令,也还写几行简单的shell脚本,其能完成的功能往往令 ...
- 创建Spring容器
对于使用Spring的web应用,无须手动创建Spring容器,而是通过配置文件,声明式的创建Spring容器.在Web应用中,创建Spring容器有如下两种方式:1.直接在web.xml文件中配置: ...
- tabbar的自定义
[self createCustomTabBar]; -(void)createCustomTabBar{ //创建一个UIImageView,作为底图 UIImageView *bgVi ...
- CUDA编程学习(二)
将数据加载到GPU后,如何在grid下的block进行并行计算(一个grid包含多个block) /****How do we run code in parallel on the device** ...
- [USACO2006][poj3182]The Grove(巧妙的BFS)
题目:http://poj.org/problem?id=3182 题意:一个棋盘中间有一个联通块,给你一个起点让你从起点开始绕联通块外围一圈并回到起点,求最小步数. 分析: 首先根据数据的范围比较小 ...
- JavaScript基础---语言基础(3)
流程控制语句 学习要点: 1.switch语句 2.for...in语句 3.break和continue语句 4.with语句 ECMA-262规定了一组流程控制语句.语句定义了ECMAScript ...
- 传智168期JavaEE就业班 day05-XML 约束与解析
* 课程回顾: * DOM解析HTML简介 * DOM 文档对象模型 * 解析器 * document对象 * getElementById("id的值"); 返回一个元素(标签) ...
- iOS开发小技巧--利用苹果官方API播放视频(方法已经过时,了解一下)