和你在一起
面向对象、模板
STL里的继承开销
在STL里面有存在很多的继承,特别是在我看的仿函数里面更是将继承用到了淋漓尽致。
如下在STL里面定义的一元函数对象。
1
/**/
/*
以下定义基类-----一元函数对象和二元函数对象
*/
2
template
<
class
_Arg,
class
_Result
>
3
struct
unary_function
{
4
typedef _Arg argument_type;
5
typedef _Result result_type;
6
}
;
取负操作的代码如下,它继承了以上定义的一元函数对象
1
/**/
/*
****************继承一元函数对象,取负操作************
*/
2
template
<
class
_Tp
>
3
struct
negate :
public
unary_function
<
_Tp,_Tp
>
4
{
5
_Tp
operator
()(
const
_Tp
&
__x)
const
{
return
-
__x; }
6
}
;
但是这些开销如何呢?这是我首先考虑的问题。如下就对相关的问题进行了测试。
1
/**/
/*
2
*设计思路:验证STL中的继承开销比较少。
3
*/
4
5
#include
<
iostream
>
6
#include
<
functional
>
7
using
namespace
std;
8
int
main()
9
{
10
cout
<<
sizeof
(binary_function
<
int
,
int
,
int
>
)
<<
endl;
//
binary_function的大小为1
11
cout
<<
sizeof
(plus
<
int
>
)
<<
endl;
//
继承binary_function的plus的大小仍然为1
12
return
0
;
13
}
结果输出都为1,证明继承的开销为0.
经过测试,如果在继承于binary_function的子类里定义一整型变量,其大小为4(在32位机器上测试),证明如果有类成员的话,基类所占用的1字节也节省了。
以上证明STL里面的继承开销为0(继承空类不需要开销)。
但是,我也存在如下的疑问,即基类的那一个字节存储的是什么呢?
posted on 2009-02-28 19:57
蒋梦翔
阅读(234)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
博客园最新博文
博问
管理
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2026年6月
>
日
一
二
三
四
五
六
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
11
统计
随笔 - 1
文章 - 2
评论 - 0
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
2010年1月 (1)
文章档案
2010年4月 (1)
2009年2月 (1)
搜索
最新评论