Enjoy yourself,and don't care about others' thinking!
----TiGERTiAN
BlogJava
首页
新随笔
联系
聚合
管理
随笔-348 评论-598 文章-0 trackbacks-0
Professional C++读书随笔(1)
1.今天看到了Mastering Classes and Objects这章,发现Copy Constructor还是自己写好,作者已经用很详细的例子说明了Compiler为我们构造的Copy Constructor,只是将变量指向那块已分配的内存,而不是真正的Copy...所以我们需要重新构造自己的 Constructor将被Copy的变量真正的Copy过来,用两个内存空间存放同样的数据。
operator=也是一样,我们应该先将原变量内部的一些内存空间释放掉,然后申请新的来存放=右边的内部成员。
1
Spreadsheet::Spreadsheet(
const
Spreadsheet
&
src)
2
{
3
int
i, j;
4
mWidth
=
src.mWidth;
5
mHeight
=
src.mHeight;
6
mCells
=
new
SpreadsheetCell
*
[mWidth];
7
for
(i
=
0
; i
<
mWidth; i
++
)
{
8
mCells[i]
=
new
SpreadsheetCell[mHeight];
9
}
10
for
(i
=
0
; i
<
mWidth; i
++
)
{
11
for
(j
=
0
; j
<
mHeight; j
++
)
{
12
mCells[i][j]
=
src.mCells[i][j];
13
}
14
}
15
}
Spreadsheet
&
Spreadsheet::
operator
=
(
const
Spreadsheet
&
rhs)
{
int
i, j;
//
Check for self-assignment.
if
(
this
==
&
rhs)
{
return
(
*
this
);
}
//
Free the old memory.
for
(i
=
0
; i
<
mWidth; i
++
)
{
delete[] mCells[i];
}
delete[] mCells;
//
Copy the new memory.
mWidth
=
rhs.mWidth;
mHeight
=
rhs.mHeight;
mCells
=
new
SpreadsheetCell
*
[mWidth];
for
(i
=
0
; i
<
mWidth; i
++
)
{
mCells[i]
=
new
SpreadsheetCell[mHeight];
}
for
(i
=
0
; i
<
mWidth; i
++
)
{
for
(j
=
0
; j
<
mHeight; j
++
)
{
mCells[i][j]
=
rhs.mCells[i][j];
}
}
2.区分下
SomeClass sc;
SomeClass scAnother;
scAnother
=
sc;
和
SomeClass sc;
SomeClass scAnother
=
sc;
其实两个的意思是不一样的,前者调用的是operator=而后者调用的是Copy Constructor。
如果你没有重载operator=,那么两段代码都是重载Copy Constructor.
发现写写笔记,还是有助于记忆的。
---------------------------------------------------------
专注移动开发
Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
posted on 2007-01-31 13:27
TiGERTiAN
阅读(392)
评论(0)
编辑
收藏
所属分类:
C/C++
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
堆和栈的区别 (转贴)
指针和引用
Professional C++读书随笔(1)
专注移动开发--Windows Mobile, Android, iPhone, J2ME, BlackBerry, Symbian, Windows Phone
慢慢混,慢慢学
<
2007年1月
>
日
一
二
三
四
五
六
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
31
1
2
3
4
5
6
7
8
9
10
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(40)
给我留言
查看公开留言
查看私人留言
随笔分类
(402)
Ajax(4)
Android(58)
BlackBerry(8)
C/C++(3)
Design Patterns(6)
Discuz!NT(1)
DotNet(26)
Feeling(61)
Flex(4)
Grails(2)
Hibernate(1)
iPhone(5)
J2ME(11)
Java(99)
JSF(26)
Linux(18)
MapXtreme(9)
Objective c(1)
Oracle(6)
Other technique(20)
Perl/Python(1)
Roller (10)
Symbian
VB/ASP(7)
WebWork(3)
Windows Mobile(10)
WindowsPhone(2)
随笔档案
(306)
2017年5月 (1)
2016年8月 (1)
2015年11月 (1)
2015年2月 (1)
2015年1月 (1)
2013年12月 (1)
2013年5月 (1)
2013年4月 (1)
2012年9月 (1)
2012年7月 (1)
2012年6月 (1)
2012年5月 (2)
2012年4月 (1)
2012年2月 (2)
2012年1月 (1)
2011年11月 (2)
2011年10月 (1)
2011年9月 (1)
2011年8月 (2)
2011年7月 (3)
2011年6月 (2)
2011年3月 (3)
2011年2月 (4)
2011年1月 (15)
2010年12月 (1)
2010年11月 (2)
2010年10月 (6)
2010年9月 (12)
2010年8月 (3)
2010年7月 (2)
2010年6月 (6)
2010年5月 (14)
2010年4月 (7)
2010年3月 (16)
2010年2月 (10)
2010年1月 (14)
2009年12月 (12)
2009年11月 (5)
2009年10月 (3)
2009年9月 (2)
2009年8月 (3)
2009年6月 (1)
2009年4月 (2)
2009年3月 (2)
2009年1月 (3)
2008年12月 (3)
2008年11月 (20)
2008年10月 (17)
2008年9月 (3)
2008年4月 (1)
2008年3月 (2)
2008年2月 (8)
2008年1月 (1)
2007年11月 (2)
2007年10月 (13)
2007年9月 (3)
2007年7月 (4)
2007年6月 (2)
2007年5月 (12)
2007年4月 (15)
2007年3月 (6)
2007年2月 (2)
2007年1月 (1)
2006年7月 (2)
2006年4月 (1)
2006年1月 (1)
2005年11月 (1)
2005年8月 (1)
2005年7月 (9)
相册
我正在读的书
我的好友们
JavaBy
有心就有翼 有梦就会飞--MC
搜索
积分与排名
积分 - 807440
排名 - 50
最新评论
1. re: Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用[未登录]
哈哈~
--a
2. re: onInterceptTouchEvent和onTouchEvent调用时序
@米其林的微笑
在你的子view重写ontouchevent方法就行
--kxt
3. re: Android弹出拨号界面和拨打电话实现
这找不到call是怎么回事?现在有别的方法实现这个功能吗?
--firetomato
4. re: Android弹出拨号界面和拨打电话实现
请我dial和call方法有什么区别么?
--jaime
5. re: Android文字跑马灯控件(文本自动滚动控件)
如何让滚动的速度快一点啊??
--学鸟
阅读排行榜
1. onInterceptTouchEvent和onTouchEvent调用时序(38686)
2. Android的Intent和IntentFilter应用说明一例(37695)
3. Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用(34313)
4. Android中短信拦截解决方案(31072)
5. Android中ContentProvider和ContentResolver使用入门(21418)
评论排行榜
1. 【JSF】Richfaces复选框树(Checkbox tree)的权限分配的解决方案(69)
2. JSF中动态生成HtmlMessage控件出错的解决办法(38)
3. hibernate中at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)异常的解决方法(27)
4. 这两天用Flex写了一个多媒体播放器(19)
5. Android文字跑马灯控件(文本自动滚动控件)(17)