行戒高绝
随笔 - 56, 文章 - 0, 评论 - 0, 引用 - 0
数据加载中……
重载全局运算符new与delete
一、
读程序:
#include
<
stdio.h
>
#include
<
malloc.h
>
void
*
operator
new
(unsigned bytes)
{
printf(
"
SELF-GLOBAL-operator new!bytes=%d\n
"
,bytes);
void
*
pvTemp
=
malloc(bytes);
return
pvTemp;
}
void
operator
delete(
void
*
pvMem)
{
printf(
"
SELF-GLOBAL-operator delete\n
"
);
free(pvMem);
}
class
claA
{
int
dat[
5
];
public
:
claA()
{
printf(
"
claA::claA()!\n
"
);
}
~
claA()
{
printf(
"
claA::~claA()!\n
"
);
}
}
;
int
main()
{
int
*
pi
=
new
int
(
123
);
delete pi;
claA
*
pmyCla
=
new
claA;
delete pmyCla;
claA
*
pmyClaA
=
new
claA[
2
];
delete []pmyClaA;
return
0
;
}
输出结果为:
SELF
-
GLOBAL
-
operator
new
!
bytes
=
4
SELF
-
GLOBAL
-
operator
delete
SELF
-
GLOBAL
-
operator
new
!
bytes
=
20
claA::claA()
!
claA::
~
claA()
!
SELF
-
GLOBAL
-
operator
delete
SELF
-
GLOBAL
-
operator
new
!
bytes
=
44
claA::claA()
!
claA::claA()
!
claA::
~
claA()
!
claA::
~
claA()
!
SELF
-
GLOBAL
-
operator
delete
二、
读程序:
#include
<
stdio.h
>
#include
<
string
.h
>
#include
<
process.h
>
#define
MAX_SIZE 10000
static
char
MemArea[MAX_SIZE];
static
char
*
pm
=
MemArea;
void
*
operator
new
(unsigned bytes)
{
printf(
"
SELF-GLOBAL-operator new!bytes=%d\n
"
,bytes);
if
(pm
+
bytes
<=
MemArea
+
MAX_SIZE)
{
pm
+=
bytes;
return
(
void
*
)(pm
-
bytes);
}
else
{
printf(
"
My-new-fail!I only have %d bytes memory now!
"
,MemArea
+
MAX_SIZE
-
pm);
printf(
"
but you need %d bytes~\n
"
,bytes);
return
NULL;
}
}
void
operator
delete(
void
*
pvMem)
{
printf(
"
SELF-GLOBAL-operator delete!\n
"
);
if
((
char
*
)pvMem
>=
MemArea
&&
(
char
*
)pvMem
<
MemArea
+
MAX_SIZE)
pm
=
(
char
*
)pvMem;
}
int
main()
{
char
*
pc
=
(
char
*
)
new
char
[MAX_SIZE];
strcpy(pc,
"
1234567abcdefg
"
);
printf(
"
pc=>%s\n
"
,pc);
delete pc;
double
*
pd
=
(
double
*
)
new
double
(
862.13
);
printf(
"
%d\n
"
,
sizeof
(
double
));
printf(
"
(*pd)=%f\n
"
,
*
pd);
double
*
pdA1
=
(
double
*
)
new
double
[
10
];
delete[]pdA1;
double
*
pdA2
=
(
double
*
)
new
double
[
1250
];
if
(
!
pdA2)
{
delete pd;
}
delete[]pdA2;
delete pd;
return
0
;
}
输出结果为:
SELF
-
GLOBAL
-
operator
new
!
bytes
=
10000
pc
=>
1234567abcdefg
SELF
-
GLOBAL
-
operator
delete
!
SELF
-
GLOBAL
-
operator
new
!
bytes
=
8
8
(
*
pd)
=
862.130000
SELF
-
GLOBAL
-
operator
new
!
bytes
=
80
SELF
-
GLOBAL
-
operator
delete
!
SELF
-
GLOBAL
-
operator
new
!
bytes
=
10000
My
-
new
-
fail
!
I only have
%
d bytes memory now
!
but you need
9992
bytes
~
SELF
-
GLOBAL
-
operator
delete
!
SELF
-
GLOBAL
-
operator
delete
!
posted on 2009-08-22 18:22
八路
阅读(592)
评论(0)
编辑
收藏
引用
所属分类:
学习笔记
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
【转】操作系统开机启动项
(转)GUN make指南
OpenGL红宝书之随笔
摘要
模板
重载全局运算符new与delete
虚函数的使用
指向一维数组的指针,引用的建立
矩阵的相关运算
全局变量、static存储类别变量、extern型外部变量
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 八路
导航
C++博客
首页
新随笔
联系
管理
<
2011年3月
>
日
一
二
三
四
五
六
27
28
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
1
2
3
4
5
6
7
8
9
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
(54)
C primer 易错点(6)
(rss)
C++ 类(7)
(rss)
C++primer 笔记(6)
(rss)
C语言(1)
(rss)
C语言函数大全(1)
(rss)
嵌入式linux笔记(15)
(rss)
网络(3)
(rss)
学习笔记(15)
(rss)
随笔档案
(56)
2011年3月 (7)
2011年2月 (14)
2010年9月 (3)
2010年4月 (4)
2010年1月 (2)
2009年12月 (3)
2009年9月 (1)
2009年8月 (22)
搜索
最新评论
阅读排行榜
1. ping指令详解(1615)
2. OpenGL红宝书之随笔(1556)
3. 数组与字符串、字符指针与其他类型指针、赋值参数、指针参数以及引用参数、函数指针(1545)
4. 《LInux与Unix Shell编程指南》笔记之tr命令(1427)
5. 《LInux与Unix Shell编程指南》笔记之sed命令(1253)