魔のkyo的工作室
posts - 225, comments - 62, trackbacks - 0, articles - 0
::
首页
::
新随笔
::
联系
::
聚合
::
管理
利用成员列表初始化对象
Posted on 2006-03-30 19:01
魔のkyo
阅读(504)
评论(0)
编辑
收藏
引用
所属分类:
Programming
转载自:http://www.zdnet.com.cn/developer/code/story/0,3800066897,39154968,00.htm
作者: ZDNet China
2003-07-30 03:41 PM
class
ratio
{
public
:
ratio(
int
top, intbot) :
//
mem-init list
x(top), y(bot)
{
//
ctor body. At this point
//
x & y have been initialized
}
private
:
int
x, y;
}
;
在下面几种情况下必须遵守成员初始化列表:
初始化一个常数;
初始化引用成员;
调用base class构造函数;
调用embedded objec构造函数;
另外,成员初始化列表是任意的,但是,它在构造函数中的初始化效率更高。下面的例子充分证明了这一点。它使用了初始化数据成员的两种形式
class
person
{
string
_name;
public
:
person(
string
name)
{_name
=
name;}
}
;
class
person
{
string
_name;
public
:
person(
string
name) : _name(name)
{}
}
;
从表面上看这两个例子差不多,但深究其实质却大不一样。第一个例子中,自变量被传值,当它在执行时,一个副本在构造函数的栈中被创建,当构造函数终止运行时,这个副本就被杀死。
对比来看第二个例子,它避免创建副本并杀死它的过程,因为使用了成员初始化列表。通常,当初始化的成员为类时,成员初始化列表比构造函数列表更有效。
第二个例子仍然没有避免副本的创建,因为是否创建副本取决于函数的参数是string对象的值类型还是引用类型,这里使用了值传递,必然会创建副本,这两个例子的区别在于,前者会先调用成员_name的无参数构造函数,在进行赋值,而后者是直接调用拷贝构造函数对_name进行构造。
(编辑:2011-06-24)
一个非行内的构造函数的成员初始化列表通常出现在定义中而不是声明中。在下面的例子中,class body包含了一个声明的构造函数,这个构造函数没有成员初始化列表,成员初始化列表出现在构造函数的定义中
class
ratio
{
public
:
ratio(
int
top, intbot);
//
no initialization list here
}
;
ratio::ratio(
int
top, intbot) : x(top), y(bot)
{}
只有注册用户
登录
后才能发表评论。
Powered by:
IT博客
Copyright © 魔のkyo
日历
<
2006年3月
>
日
一
二
三
四
五
六
26
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
公告
联系Email: kyo86.dai[at]gmail[dot]com QQ: 285819504
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(12)
给我留言
查看公开留言
查看私人留言
随笔分类
AJAX(1)
Algorithm(9)
Apothegm
C++(6)
DataStucture(4)
Graphics(7)
JAVA(7)
JSP(4)
Linux(11)
Math(5)
Number Theory(1)
PHP(2)
Programming(42)
Python(11)
SQL(6)
STL(8)
机器学习(3)
随笔档案
2022年4月 (1)
2022年3月 (2)
2022年2月 (2)
2021年12月 (1)
2021年11月 (1)
2021年10月 (2)
2021年8月 (1)
2021年2月 (4)
2020年12月 (1)
2020年9月 (1)
2020年8月 (3)
2020年6月 (1)
2020年4月 (1)
2020年3月 (8)
2020年2月 (2)
2020年1月 (8)
2019年11月 (7)
2019年10月 (3)
2019年6月 (2)
2018年2月 (1)
2018年1月 (1)
2017年3月 (1)
2016年12月 (2)
2016年9月 (1)
2016年5月 (2)
2016年3月 (1)
2016年2月 (1)
2016年1月 (7)
2015年11月 (1)
2015年3月 (1)
2014年12月 (2)
2014年9月 (2)
2014年7月 (1)
2014年6月 (1)
2014年3月 (2)
2014年1月 (1)
2013年9月 (1)
2013年2月 (2)
2012年12月 (1)
2012年10月 (2)
2012年8月 (1)
2012年6月 (2)
2012年3月 (3)
2012年1月 (7)
2011年12月 (1)
2011年11月 (2)
2011年10月 (2)
2011年8月 (4)
2011年7月 (4)
2011年6月 (1)
2011年5月 (1)
2011年4月 (3)
2010年12月 (2)
2010年11月 (3)
2010年10月 (4)
2010年9月 (1)
2010年8月 (1)
2010年6月 (2)
2010年5月 (2)
2010年4月 (2)
2010年3月 (3)
2010年2月 (1)
2009年11月 (1)
2009年9月 (1)
2009年8月 (2)
2009年7月 (2)
2009年6月 (2)
2009年4月 (1)
2009年3月 (1)
2009年2月 (3)
2008年12月 (2)
2008年11月 (1)
2008年9月 (7)
2008年8月 (3)
2008年6月 (1)
2008年1月 (2)
2007年12月 (1)
2007年10月 (1)
2007年9月 (1)
2007年8月 (6)
2007年7月 (6)
2007年6月 (3)
2007年5月 (2)
2007年3月 (1)
2007年2月 (5)
2007年1月 (1)
2006年10月 (4)
2006年9月 (3)
2006年7月 (1)
2006年6月 (4)
2006年5月 (10)
2006年4月 (9)
2006年3月 (1)
Friends
魔のkyo的工作室(新)
Links
搜索
最新评论
1. re: Ubuntu下使用PPTPD搭建VPN
使用下来不太稳定,最后要求高的地方还是用SSH Tunnel解决的,PPTP的VPN就留着日常对稳定性要求不高的地方临时用用
--魔のkyo
2. re: python中文支持 报错解决
要想完美的解决所有中文问题,恐怕还是要升级到python 3更方便
--魔のkyo
3. re: SQL Server2005还原失败,数据库在使用中(database is in use) 的解决方案
评论内容较长,点击标题查看
--魔のkyo
4. re: 程序异常控制
你们一个函数了解的够透彻的啊,本尊受教了.
--张少爷
5. re: 用std::atomic和semaphore实现的多生产者单消费者无锁队列
评论内容较长,点击标题查看
--leeco
阅读排行榜
1. 使用Jenkins搭建持续集成(CI)环境(45898)
2. 欧拉角与万向节死锁(35335)
3. 在Windows平台搭建基于SSH的Git服务器(12091)
4. 解决“此商品无法在您所在的国家/地区购买或下载”(9438)
5. 如何在Docker容器内访问宿主机端口(9401)
评论排行榜
1. C/C++变量的内存使用,将变量按位输出(10)
2. 使用Jenkins搭建持续集成(CI)环境(7)
3. [转]RMQ问题以及ST算法(6)
4. DD牛的背包九讲(5)
5. 自制自动识别Endian的简易文件打包解包函数(4)