Symbian OS 开发初级手册(转)
CBar *pBar = new (ELeave) CBar;
在创建实例的时候Symbian C++使用 new (ELeave) 来代替普通的 new , 比如: CBar *pBar = new (ELeave) CBar; 这个用法是考虑到手机特殊的属性:内存一般较小, 经常会有内存不足的情况出现。 在pc上如果内存不足我们就会退出程序, 但是在手机不能那样频繁的退出, 所以内存不足被划分为异常, 需要离开. 下面这个函数就会在内存不足的时候在A行离开: void FooBarL() 离开 作为异常处理的机制, 存在着一个问题。如果上面这个程序在B行Foo()返回了一个错误值,就会在那一行离开,但是系统为pBar指针分配的内存也就泄漏了。为了解决这个问题, Symbian 程序中频繁使用CleanupStack(清洁栈). 它的典型使用方式如下: void FooBarL() CleanupStack::PushL(pBar); delete pBar; //C 他的作用就是, 在B行之前, 把pBar指针放到清洁栈上, 一旦B行离开了,清洁栈就会自动删除pBar回收内存, 如果B行顺利通过, 就可以通过pop把pBar拿下来了。 CleanupStack 有效地解决了这个潜在的内存泄漏问题, 但是这个方法在一个特殊的情况下不适用。 那就是如果一个类的构建函数离开, 那么new 为它分配的内存就会泄漏。 (构建的顺序是:系统分配内存,然后运行构建函数) 这个问题就导入了下一个概念:two-phase construction (二层构建) CHelloWorldBasicAppView* CHelloWorldBasicAppView::NewL(const TRect& aRect) CHelloWorldBasicAppView* CHelloWorldBasicAppView::NewLC(const TRect& aRect) void CHelloWorldBasicAppView::ConstructL(const TRect& aRect) // Set the windows size // Activate the window, which makes it ready to be drawn 先看NewLC函数, 它创建一个CHelloWorldBasicAppView的实例, 然后把他放在清洁栈上,然后调用它的第二层构建函数(可以离开的), 然后并没有把实例从清洁栈上取下就返回了。这样的好处就是如果我们用NewLC创建一个对象,然后调用它的可以离开的函数就不必把它放到清洁栈上,因为它已经在上面了。NewL的功能和NewLC 是一样的,只是在返回实例前把它取下清洁栈。一般的C类都提供NewL,不是所有的C类都会提供NewLC. 使用清洁栈需要注意: |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126298/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10294527/viewspace-126298/
Symbian OS 开发初级手册(转)相关推荐
- Symbian OS 开发初级手册 (1)(转)
Symbian OS是当前应用最为广泛的smart phone操作系统. Nokia,Panasonic,Siemens,Sony Ericsson的很多手机都是基于这个系统的. 可惜国内关于Symb ...
- Symbian OS 开发初级手册 9(转)
上课讲了Symbian OS中多线程的使用, 这可我们说说Symbian OS中使用更频繁的一个框架:Active Object(这里简称AO). 上课讲了Symbian OS中多线程的使用, 这可我 ...
- Symbian OS 开发的特点(转)
Symbian OS 作为一个专门为手机打造的操作系统与PC的操作系统有着很多根本上的不同.本文就来探索一下这些区别.了解这些区别有助于我们更容易的理解Symbian OS的设计(比如清洁栈,二层构建 ...
- symbian系统开发教程(一)
第一章:Symbian OS简介 作者:谢兴 enigma19971@hotmail.com ---转载需 ...
- Symbian OS简介
原文地址:http://blog.csdn.net/wh_xiexing/archive/2007/11/15/1887002.aspx 1.1. Symbian系统简介 当前有很 ...
- symbian系统开发教程(一) 1
第一章:Symbian OS简介 作者:谢兴 enigma19971@hotmail.com ---转载需 ...
- Carbide.c++ For Symbian 搭建开发环境
在搭建开发环境之前,首先我们下载需要的SDK及辅助工具. 1. 下载perl,SDK要求的版本是5.6.1版的,只能是这个版本的,版本高了或低了都可能导致搭建环境的不成功,下载地址:http://ww ...
- Symbian S60开发环境搭建
一.准备工作 1. 下载perl,必须用5.6.1版,版本高了或低了都可能导致搭建环境的不成功 下载地址:http://www.activestate.com/ 2. 下载java的运行环境,要求是1 ...
- Symbian OS on E65应用开发手记(3)——SDK注册及14天学习总结
在环境搭建完成14天以后,今儿竟然神奇地提示我SDK已过期,需要注册--真吓人,你干吗我刚安装完的时候不提示我注册啊?折腾我!!!还以为我会从此找不到序列号,从此用不了了呢... 注册方法如下: 在对 ...
最新文章
- linux tcpdump monitor模式 抓不到包 解决办法
- 给列名称命名_批量提取文件名,然后换上新名称
- AOE网的关键路径的计算
- 截断正态分布(Truncated normal distribution)nn.init.trunc_normal_
- datagridview 排序后 选择不变_排序算法之插入排序
- substring substr slice 区别
- 开机加电到系统打开究竟发生了什么?(1)
- [Java][Android] 多线程同步-主线程等待所有子线程完成案例
- java数组使用实验报告_Java实验报告二数组.doc
- android 广播 源码,广播电台APP源代码 电台APP源代码 播客APP源代码 Android源代码...
- Excel数据分析项目——电商数据分析实战
- 关于python函数参数的描述中、错误的是_在Python中,以下关于函数的描述错误的是哪一项?...
- RMAN delete noprompt obsolete参数研究
- 我们的时空之旅(一)——丽江古城
- 大学计算机考试知识点归纳总结,大学计算机基础重点归纳.doc
- Java实现会员和非会员,如何选择会员和非会员功能?
- No changes detected报错解决方案
- 什么是消息补偿机制?
- 【STL】string详解(string类常用的操作函数、构造函数、赋值操作、子符串的拼接、查找和替换、比较、存取、插入和删除、获取)
- 开源库OGR的入门知识