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之后来发 ...
随机推荐
- 【硬件】DELLserver硬件监控及DELL系统管理工具OMSA介绍
1.1.1. DELLserver硬件监控及DELL系统管理工具OMSA介绍 本文介绍採用使用Nagios和OMSA监控DELLserver的硬件健康状态,Nagios监控的方式是NRPE模式,须要配 ...
- Gamma校正及其OpenCV实现
參考:[1]http://www.cambridgeincolour.com/tutorials/gamma-correction.htm [2]http://en.wikipedia.org/wik ...
- json xmpp
https://github.com/lamfire/jspp http://blog.csdn.net/nomousewch/article/category/823687 http://my.os ...
- linux文件的隐藏属性:chattr
1. 文件的隐藏属性 linux除了9个权限外,还有些隐藏属性, 使用chattr命令来设置. 使用方法: $ chattr +-=[ASacDdIijsTtu] + : 添加一个特殊參数 - : ...
- disable_functions(禁用php函数)
我们怎么来设置php禁止运行的函数呢? 其实,我们可以在php.ini文件进行设置,如图
- CHENEY-YANG'S BLOG(cheney-yang)
This is Cheney-Yang's blog ! Welcome to here ! This is Cheney-Yang's blog ! Welcome to here ! This i ...
- Windows Server 2008 R2 安装及配置指南
一.安装需求: 1. 硬件需求条件 硬件 需求 处理器 最低:1.4 GHz(x64处理器) 注意:Windows Server 2008 for Itanium-Based Systems 版本需要 ...
- jquery插件select2事件不起作用(select2-3.5.4)
jquery插件select2事件不起作用 >>>>>>>>>>>>>>>>>>>&g ...
- Java-Android 之出滚动条和卷轴页面
<?xml version="1.0" encoding="utf-8"?> <HorizontalScrollView xmlns:andr ...
- 再次回首 TCP Socket服务器编程
转载:http://www.cnblogs.com/zc22/archive/2010/06/27/1766007.html ------------------ 前言 --------------- ...