&豪
豪->blog
C++博客
|
首页
|
发新随笔
|
发新文章
|
联系
|
聚合
|
管理
随笔:81 文章:90 评论:237 引用:0
智能指针源码
智能指针源码,可像普通指针一样使用,但可以自动释放内存,代码很短,看一下就明白原理了。
#ifndef AUTOPTR
#define
AUTOPTR
/**/
/*
*
* 智能指针类
*/
template
<
class
T
>
class
AutoPtr
{
public
:
AutoPtr(T
*
p
=
0
) : pointee(p)
{}
//
默认构造函数
template
<
class
U
>
AutoPtr(AutoPtr
<
U
>&
rhs) : pointee(rhs.release())
{}
//
复制构造函数
~
AutoPtr()
{delete pointee;}
template
<
class
U
>
AutoPtr
<
T
>&
operator
=
(AutoPtr
<
U
>&
rhs)
{
//
赋值函数
if
(
this
!=
&
rhs)
{
reset(rhs.release());
}
return
*
this
;
}
T
&
operator
*
()
const
{
return
*
pointee;}
T
*
operator
->
()
const
{
return
pointee;}
T
*
get
()
const
{
return
pointee;}
//
获取dumb pointer
T
*
release()
{
//
释放dumb pointer 的拥有权,并返回其值
T
*
oldPointee
==
pointee;
pointee
=
0
;
return
oldPointee;
}
void
reset(T
*
p
=
0
)
{
//
重复置p指针
if
(pointee
!=
p)
{
delete pointee;
pointee
=
p;
}
}
private
:
T
*
pointee;
}
;
#endif
AUTOPTR
test.cpp
#include
"
AutoPtr.h
"
#include
<
iostream
>
#include
<
string
>
using
namespace
std;
int
main()
{
AutoPtr
<
int
>
p
=
new
int
;
*
p
=
100
;
printf(
"
%d\n
"
,
*
p);
AutoPtr
<
string
>
sp
=
new
string
;
*
sp
=
"
hello world
"
;
printf(
"
%s\n
"
, sp
->
c_str());
return
0
;
}
发表于 2008-04-17 17:01
豪
阅读(176)
评论(3)
编辑
收藏
引用
所属分类:
C++之梦
评论
#
re: 智能指针源码
你的实现没办法像这样使用:
AutoPtr<int> foo()
{
return AutoPtr<int>(new int);
}
void bar()
{
AutoPtr<int> p = foo();
}
#
re: 智能指针源码
@fr3@K
本来就不应该返回指向局部变量的指针
#
re: 智能指针源码
std::auto_ptr 就可以. 请参考这篇 (
http://www.gotw.ca/publications/using_auto_ptr_effectively.htm
) 的 example 7 的用法说明.
实作上可以参考这里 (
http://code.google.com/p/gion/source/browse/branches/0.1/include/gion/auto_array.hpp
), 找与 auto_array_ref 相关的代码.
刷新评论列表
标题
姓名
主页
验证码
*
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关链接:
相关文章:
真是水,居然可以这样将int转成str
内存池(version1.1)
智能指针源码
More Effective 的 Reference Counting
从二叉树的递归遍历想到的:利用重载函数,使函数接口更"友好"
又是一题动态规划--经典
看 c++primer 后的一个问题
递归--->计算日期总数
不看书怎么见彩虹?
变量初始化的重要性!
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子博客
管理
<
2008年4月
>
日
一
二
三
四
五
六
30
31
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
1
2
3
4
5
6
7
8
9
10
公告
潜心看书研究!
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(14)
给我留言
查看公开留言
查看私人留言
随笔分类
(80)
AJAX(1)
(rss)
C++之梦(11)
(rss)
DesignPattern(1)
(rss)
PHP之路(9)
(rss)
TCP/IP
(rss)
VC
(rss)
计算机图形学(2)
(rss)
生活感想(24)
(rss)
算法&ACM(32)
(rss)
文章分类
(88)
ACM题目(26)
(rss)
apache(3)
(rss)
Basic C++(8)
(rss)
Java(4)
(rss)
Linux(3)
(rss)
MFC(2)
(rss)
mysql(2)
(rss)
php学习与实践(4)
(rss)
string match(3)
(rss)
操作系统(1)
(rss)
计算机(1)
(rss)
数据结构与算法(29)
(rss)
数论(1)
(rss)
网络(1)
(rss)
相册
MY LIFE
MY PRODUCTION
SCUT/ICPC MY TEAM
ACM OJ
HOJ
POJ
TOJ
URAL
UVA
ZOJ
My friends
Apple's Garden
asp's blog
chgsh's blog
evicn's blog
jay_zzw's blog
shyli's blog
sicheng's blog
xmm's blog
豪的space
踏雪赤兔's blog
搜索
积分与排名
积分 - 67565
排名 - 22
最新评论
1. re: 这就是树状dp..好难啊..
谢谢
--newacm
2. re: 树状数组[未登录]
请问一下, out[sum(x-1) + f[x]]++; 中的sum(x-1)不是求和吗?
这句是怎样实现的啊,没看懂,麻烦lz解释一下
--David
3. re: 二分图最大匹配(匈牙利算法)
代码有问题啊 过不了poj1469的样例啊
--k
4. re: 最短路Bellman-Ford实现
大哥,你的程序连图都没输入进去,怎么计算?我试着把图放到g[][]中去,但是程序输出的结果是错误的,怎么回事?
--白冰
5. re: 状态压缩DP, pku3020
二分匹配做的。。关键是状态压缩不会。5555...
--ecnu
阅读排行榜
1. 内存池(version1.1)(2040)
2. 看 c++primer 后的一个问题(1981)
3. 中国剩余定理(同余方程组)小结(1659)
4. 扩展的欧拉函数 pku1091(1480)
5. 又是一题动态规划--经典(1262)
评论排行榜
1. 好高兴啊,a+b那题一次通过啦,acm有个好开始!!!^_^(25)
2. 今天又过条简单题,呵呵(14)
3. 看 c++primer 后的一个问题(13)
4. 变量初始化的重要性!(9)
5. 从二叉树的递归遍历想到的:利用重载函数,使函数接口更"友好"(9)