分享
 
 
 

Symbian翻译 之 Object lifetimes and cleanup

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

注释:因为C++ and machine architecture、Object orientation

basics这两个章节主要讲的是C++的编程方法,所以在我的文档里面,这些部分被CANCEL了。

Overview

不管是在堆栈还是堆,对象都有自己的生命期,具体如下:

1、给对象分配内存[堆栈或者堆]

2、初始化:也就是给对象所在的内存赋值

3、使用对象

4、清除:释放对象使用的各种资源

5、释放对象所占的内存[从堆栈或者堆]

对象的生存期是一个基础概念。在某些操作系统,它是可以忽略的,因为程序中止的时候,堆栈和堆都会被销毁。但是在Symbian平台,程序往往需要能运行数个月。这就是为什么对象在生命期结束的时候就必须马上清除所有内存是那么重要的原因,不管它们分配在堆栈还是堆,不管它们生命期的结束是因为正常处理还是因为错误。

Lifetimes in C

从略

Lifetimes in C++

从略

Lifetimes in the Symbian platform

Symbian的堆栈上的对象的生命期和标准C++的很象。但是堆上面的对象的生命期的控制和标准C++非常不同,参看下面的代码:

void FooL()

{

CS* s=new (Eleave) CS; // allocate and check分配并且检查

CleanupStack::PushL(s); // push, just in case 入栈

s->ConstructL(p1,p2); // finish constructing - might leave 完成构建可以会产生leave

s->UseL(p3,p4); // use - might leave 使用可能会产生leave

CleanupStack::PopAndDestroy(); //

destruct, de-allocate 析构,清除内存

}

这个代码展示了四件重要的事儿:

所有的基于堆的类的名字都必须用C开头:实际上它们都继承自一个唯一的基类CBase,这基类提供了简化清除过程的功能。

“清除堆栈”用来保存对象的引用:如果由于内存耗尽或者其他错误造成leave发生,清除堆栈里面的对象会弹出并且摧毁。在这种情况下,压入在清除堆栈的CBase*对象,可以通过调用它们的C++析构器来摧毁。CBase类有一个虚拟的析构器(CBase::~CBase)是这个行为成为可能。

任何可能产生leave的函数的名字都必须用L结尾。当你看到一个函数可能leave的话,你必须问问如果leave会怎么样,如果不的话又会发生什么。操作系统提供了所有程序的底层结构来支持对象在发生leave的时候释放空间,而不需要给程序员更多负担。

new(ELeave)是new操作符的重载,在分配内存的时候将会leave。它不会返回null指针。

两件其他的事情值得注意:

由于清除堆栈本身的每个堆栈帧也是需要内存分配的,所以压栈(push)也是可能会leave的。PushL()这个函数名也说明了这点。清除堆栈保证在调用CleanupStack::PushL()之前有剩余的空间,所以对象引用总是能成功的保存在清除堆栈里。如果在分配下一个堆栈帧发生leave,对象会弹出而且摧毁。

C++构建器一定不能产生leave。对于那些构建过程需要资源分配的,或者任何操作可能失败的堆想来说,必须把构建器的代码分成,不会产生leave的构建器和另外可能会产生leave的初始化函数,通常这个初始化函数叫做ConstructL()。

清除堆栈、CBase、两部分构建器都属于操作系统的核心。清除堆栈编程有很少的规则,学习它们是相对容易的。参看“清除堆栈基础”来得到更多的信息。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有