auto_ptr, which can release the space automatically
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
template<class T>class auto_ptr{private: T*ap;public: //constructor & destructor-----------------------------------(1) explicit auto_ptr(T*ptr=0)throw():ap(ptr) { } ~auto_ptr()throw() { delete ap; } //Copy & assignment--------------------------------------------(2) auto_ptr(auto_ptr& rhs)throw():ap(rhs.release()) { } template<class Y> auto_ptr(auto_ptr<Y>&rhs)throw():ap(rhs.release()) { } auto_ptr& operator=(auto_ptr&rhs)throw() { reset(rhs.release()); return*this; } template<class Y> auto_ptr& operator=(auto_ptr<Y>&rhs)throw() { reset(rhs.release()); return*this; } //Dereference----------------------------------------------------(3) T& operator*()const throw() { return*ap; } T* operator->()const throw() { returnap; } //Helper functions------------------------------------------------(4) //value access T* get()const throw() { returnap; } //release owner ship T* release()throw() { T*tmp(ap); ap=0; return tmp; } //reset value void reset(T*ptr=0)throw() { if(ap!=ptr) { deleteap; ap=ptr; } } //Special conversions-----------------------------------------------(5) template<class Y> struct auto_ptr_ref { Y*yp; auto_ptr_ref(Y*rhs):yp(rhs){} }; auto_ptr(auto_ptr_ref<T>rhs)throw():ap(rhs.yp) { } auto_ptr& operator=(auto_ptr_ref<T>rhs)throw() { reset(rhs.yp); return*this; } template<class Y> operator auto_ptr_ref<Y>()throw() { returnauto_ptr_ref<Y>(release()); } template<class Y> operator auto_ptr<Y>()throw() { returnauto_ptr<Y>(release()); }}; |
|
1
2
|
int*p=new int(0);auto_ptr<int> ap(p); |
|
1
2
3
|
int*p=new int(0);auto_ptr<int>ap1(p);auto_ptr<int>ap2(p); |
|
1
2
|
int*pa=new int[10];auto_ptr<int>ap(pa); |
|
1
2
3
4
|
~auto_ptr()throw(){ if(ap)delete ap;} |
|
1
2
3
4
|
int*p=new int(0);auto_ptr<int>ap1(p);auto_ptr<int>ap2=ap1;cout<<*ap1;//错误,此时ap1只剩一个null指针在手了 |
|
1
2
3
4
5
6
7
8
|
void f(auto_ptr<int>ap){ cout<<*ap;}auto_ptr<int>ap1(new int(0));f(ap1);cout<<*ap1;//错误,经过f(ap1)函数调用,ap1已经不再拥有任何对象了。 |
|
1
2
|
class base{};class derived:public base{}; |
|
1
|
auto_ptr<base>apbase=auto_ptr<derived>(new derived); |
|
1
2
3
4
5
6
|
A a1;A a2(a1);A a3;a3=a1;//那么a2==a1,a3==a1 |
|
1
2
3
4
5
6
7
8
|
struct A{ void f();}auto_ptr<A>apa(new A);(*apa).f();apa->f(); |
|
1
|
auto_ptr<int>ap1=auto_ptr<int>(new int(0)); |
auto_ptr, which can release the space automatically的更多相关文章
- iPhone:4.7 5.5 4 3.5 对应的各个设备屏幕尺寸对应的像素及App上线信息
Shared App Information You can access these properties from the App Details page in the App Informat ...
- ORA-15028: ASM file '..' not dropped; currently being accessed --转载
Couple of weeks ago we had a problem with one of our busiest databases. The FRA was filling quite ra ...
- Why do we need smart pointer and how to implement it.
Here are two simple questions. Problem A #include <string> include <iostream> using name ...
- EBS Archiving and Purging: You Know you need to
A number of trends in the IT industry have contributed to the increasing size of ERP application dat ...
- page size
https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_page_size https://dev.mysql.com/doc/refma ...
- 1Z0-053 争议题目解析704
1Z0-053 争议题目解析704 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 704.View the Exhibit and examine the data manipul ...
- 【ubuntu】install openbox+tint2+bmenu on ubuntu12.04.4
原文地址: http://ndever.net/articles/linux/install-openbox-ubuntu-1304-1310 openbox是我用过的轻量窗口中最好用的了. Step ...
- C++11智能指针
今晚跟同学谈了一下智能指针,突然想要看一下C++11的智能指针的实现,因此下了这篇博文. 以下代码出自于VS2012 <memory> template<class _Ty> ...
- Android & Eclipse FAQ
一.eclipse中格式化代码快捷键Ctrl+Shift+F失效的解决办法 当我要格式化代码的时候,右键-source-format能够起效,但ctrl+shift+f不好使了. google之后来发 ...
随机推荐
- Win32下 Qt与Lua交互使用:配置Qt下Lua运行环境
Lua与C++之间可以实现非常强的交互性.Lua中可以使用C++中的函数,C++中也可以使用Lua中的函数.由此可以引发出很多奇思妙想了. 简单来说,Lua动态的特性补充了C++的功能.当然,也看你具 ...
- [转] Putty - 文件夹显示的蓝色太暗
Putty SSH key的后缀为ppk 默认文件夹的颜色显示为ANSI Blue,颜色太暗. ANSI Blue : RGB(0, 0, 187) 将ANSI Blue修改为和ANSI Blue B ...
- GUI编程笔记(java)04:GUI(HelloWorld)窗体案例
1.Frame 在JAVA中,Frame是一种控件,可作为父窗体加载其他swing控件.案例: package cn.itcast_01; import java.awt.Frame; public ...
- 使用gradle构建java项目
gradle是什么东东 gradle是继ant,maven之后另外一种的面向java的自动化项目构建工具,他是基于groovy语言的.相对于ant,maven,gradle显得更加简单. 安装grad ...
- Modem常用概念
真实设备的标识,即DEVICE_ID.比如,Android设备是手机,这个DEVICE_ID可以同通过TelephonyManager.getDeviceId()获取,它根据不同的手机设备返回IMEI ...
- 20、CSS
CSS 层叠样式表(Cascading Style Sheets). 用于定义显示HTML样式. DIV和SPAN div是块级元素. span是行级元素. 将一些页面中的内容包裹起来统一设置样式. ...
- JKXY的视频内容下载工具类
package cn.jsonlu.make.license; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONOb ...
- Liferay环境搭建实录
1. 安装Liferay IDE:打开Eclipse的Help-->Eclipse Marketplace,在下图所示搜索框中输入liferay,回车搜索: 搜索结果如下图所示: 点击insta ...
- volatile用处说明
在JDK1.2之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的.而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要. 在当前 ...
- dumpbin.exe
有时候我们想查看一个exe引用了哪些动态库,或者我们想看某个动态库包含哪些接口函数,这个时候可以使用dumpbin.exe工具: 1.输入Dumpbin -imports calldll.exe查看它 ...