symbian 开发诀窍大放送
2010-02-23 16:06:00 来源:WEB开发网{
CSomeObject* myObject1=new (ELeave)CSomeObject;
CSomeObject* myObject2=new (ELeave)CSomeObject;…
// Do something here with thevariables
CleanupStack::PushL(myObject1);
CleanupStack::PushL(myObject2);
// Do something more with the variables…
CleanupStack::PopAndDestroy(2);
// myObject2, myObject1
}
因为myObject2 的创建可能失败,造成myObject1“悬”在那里不能被清理。应该这样来实现:
void doExampleL()
{
CSomeObject* myObject1=new (ELeave)CSomeObject;
CleanupStack::PushL(myObject1);
CSomeObject* myObject2=new (ELeave)CSomeObject;
CleanupStack::PushL(myObject2);
…
// Do something here with the variables…
CleanupStack::PopAndDestroy(2);
// myObject2, myObject1
}
12. 注意,那些名称有大写字母C 结尾的函数(例如NewLC())会自动把其对象置于CleanupStack。您不应该自己来将这些对象压入CleanupStack,否则该对象会入栈两次。当您创建非成员变量并为其分配内存时,这些由C 结尾的函数很有用。
13.“两段构造方法”是Symbian OS 内存管理的关键部分。基本原则是Symbian OS 中的构造函数或析构函数永远不应该发生Leave。倘若一个C++ 构造函数Leave,构造过程未完成的对象得不到清理,因为还没有生成指针指向该对象。为此,SymbianOS 中的构造函数仅将该对象实例化,而后调用该对象的ConstructL()函数,在其中将成员数据实例化。一旦ConstructL()发生Leave,标准的析构函数将被调用来清除所有至此已被成功分配的成员变量。在您的编码中照用这一设计模式来防止内存泄漏,至为关键。当您写每一行代码时,都应该问自己:“ 这一行代码能否发生Leave ?”假如回答为“是”,则应考虑“是否所有资源都将被释放?”。
14. 编码中请勿使用_L()宏——而应使用_LIT()。_L()自Symbian OS v5 起已是‘不推荐使用’(deprecated),它的问题在于它将调用TPtrC(const TText*)构造函数,该构造函数会调用strlen()函数来计算该字串的长度。虽然这不会带来额外的RAM 开销,却会在运行时占用更多CPU
- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››开发者眼中的Windows Phone和Android
- ››Symbian S60 SocketConnection参数
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››Symbian乏力:2010年诺基亚悲情大事记
- ››Symbian三大升级开启2011年新战略
- ››Symbian/Android/iOS/WM安装包对比
- ››Symbian一个活动对象的测试例子
- ››Symbian ListBox控件
- ››Symbian下自动切换SDK的批处理代码
更多精彩
赞助商链接