Chinaunix首页 | 论坛 | 博客
  • 博客访问: 124240
  • 博文数量: 31
  • 博客积分: 1420
  • 博客等级: 上尉
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-29 14:04
文章分类

全部博文(31)

文章存档

2014年(1)

2013年(1)

2011年(4)

2010年(2)

2008年(23)

我的朋友
最近访客

分类:

2008-01-04 12:32:20

前段时间突然想到两则现实与程序对比的例子,下面分析了下,有不当之处,见笑

1.说"从前有座山,上山有座庙,庙里有个2个和尚,老和尚给小和尚讲故事,
说"从前有座山,上山有座庙,庙里有个2个和尚,老和尚给小和尚讲故事,
说"......

上面的这个故事,相信一般人都听说过,无非是在拒绝讲故事的时候搪塞的一个冷笑话;
仔细想来,这个故事里面倒是体现了程序设计中的递归算法,可以这样描述:
---------------------------------------------------------------------------
讲故事{ // function tellStory(Monk &teller,Monk &listener)
从前有座山; // Hill hill;
上山有座庙; // Temple temple(hill)
庙里有个2个和尚; // Monk oldMonk(70),yongMonk(07);
老和尚给小和尚 "讲故事"; // tellStory(oldMonk,yongMonk);
}
---------------------------------------------------------------------------
唯一可惜的是上面的那个故事往往是在大家的笑声后结束,跟这个简单的设计一样,
算是一个异常退出的,没有回收资源,具体设计时候还应有个开始回溯的检查点 :)


2.克隆羊多利(Dolly)的事情曾经家喻户晓,代表了人类对DNA基因控制的伟大实践;至于是否
已有非法克隆的人类不得而知,不过理论上很多人相信,克隆人的关键远不是技术问题而是个
社会伦理问题;我们知道,克隆是不会有被克隆的那个主体的意志和记忆的,人的记忆和意志
是后天产生的,就像肌肉男不是天生肌肉男,靓女的后代不定会是靓女一样。

这个克隆的概念被引申到C++里面的对象克隆(深拷贝|浅拷贝)的方式,或者是"设计模式"的
原型(Prototype)结构模式,可以使用以下的类声明这样解释:
---------------------------------------------------------------------------
人 { // Human
取得DNA // public: Human *Human(const Human &);
被克隆 // public: Human *Clone(){ return new Human(*this); }

生老病死 // public: function born();older();sick();die();
衣食住行 // public: function dressing(),feeding(),resided(),walking();
七情六欲 // private: Emotion love,hate,sad,sorry ....
}
人 被克隆的人; // Human aMan;
人 克隆人甲; // Human *cloneMan = aMan.Clone();
---------------------------------------------------------------------------
其中,最关键的方式就是人类定义(其实可以认为DNA的遗传信息)中,Clone方法中,
有所谓的深拷贝与浅拷贝的问题:
1.上面的简单例子中只是个浅拷贝,意味着克隆对象与被克隆对象可能共用某些成员变量,
这个类似由于胚胎分裂不完全而产生联体婴儿,可以有对立的大脑,却不得不共用四肢;
对于这种浅拷贝公用对象的问题,在回收对象资源时候有问题:如联体人在一方死亡情况下,
要通过外科手术将或者的那个分离开来,是非常困难以至于是危险的。
2.对于深拷贝,我们必须对成员变量重分配空间;使得克隆对象也是对立的,具有受场景制约的
变量值;也就是克隆人是个独立的人,而非联体婴儿,可以具有独立的个性特色。
不过即使是深拷贝而得到的具有完全独立行为的克隆人,是不具有被克隆父对象的"思想"的,
在类的解释,就是对象的属性(成员变量),随着处在各自不同的环境,是不相同。这也就是
记忆不能被克隆的原因。
阅读(497) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~