Symbian^3对标准C++的支持
Symbian^3对标准C++的支持
声明:原文来至 Standard C++ Support on the Symbian Platform,水平有限,敬请谅解。
http://library.forum.nokia.com/index.jsp?topic=/Nokia_Symbian3_Developers_Library/GUID-2CCD1748-9EDE-5383-9941-A3051E06F3E2.html
(注:S60平台增强了对标准c++的支持,开发者可以把代码编译成标准C++类型的库,STDEXE、STDDLL、STDLIB)
本节讲述Symbian^3对标准C++运行时特性的支持
提纲:
全局操作符new (global operator new)
new_handler
全局对象的析构 (global objects destruction)
STL
全局操作符new (global operator new)
在标准C++中,new分配内存失败时,如果设置的处理错误的handler,则调用这个handler,如果没有设置handler,则抛出exception (std::bad_alloc)。但是在symbian C++中,动态分配内存失败返回NULL指针。
所以当你编写C++代码时,必须清楚当前使用标准C++还是Symbian C++。
你可以使用下列办法,在Symbian平台上使用标准C++。
1> 编译成STD类型的应用程序或库
2> 在MMP文件中使用STDCPP关键字
注意,使用全局操作符new带来的问题参见"new操作符的使用"。
警告,symbian平台不允许你混合使用全局操作符new和symbian C++操作符new。
下面的例子演示了如何在MMP文件中使用STDCPP关键字来使用标准C++的操作符new,而不用把工程编译成STD类型。
//operator_new_example.mmp
Target operator_new_example.exe
Targettype exe
//The STDCPP keyword specifies Standard C++
STDCPP
Source operator_new.cpp
Systeminclude /epoc32/include/stdapis/stlportv5
Systeminclude /epoc32/include/stdapis
Library libstdcppv5.lib libc.lib
Capability all -tcb
//operator_new.cpp
#include <new>
int main()
{
try
{
int *ptr = new int(0);
//do something
}
catch(std::bad_alloc)
{
return 1;
}
delete ptr;
return 0;
}
new_handler
标准C++使用new分配内存失败时,如果设置了new_handler,则会使用这个new_handler处理这个错误。现在Symbian C++也支持这个特性。
下面的例子演示了如何在Symbian平台上使用这个特性。(别忘了MMP中使用STDCPP关键字或者使用STDEXE/STDDLL编译类型)
#include <new>
int one_huge_chunk = 0xa000;
int *last_huge_chunk=NULL;
void foo()
{
/*
* new_handler释放最后一次成功分配的内存,来保证下一次分配成功。
*/
delete [] last_huge_chunk;
}
void bar()
{
last_huge_chunk = new int[one_huge_chunk];
}
int main()
{
std::new_handler h_new;
try
{
while(1)
{
// 不停地分配内存,直到系统内存耗尽,不能再分配出内存。
bar();
}
}
catch(std::bad_alloc ba)
{
/*
* 没有设置new_hanlder时,分配失败会得到一个std::bad_alloc类型的exception,
* 下面设置new_handler。
*/
h_new = (std::new_handler)&foo;
try
{
/*
* 测试new_handler释放一次内存后,还能否再分配出内存。
*/
bar();
}
catch(...)
{
}
return 0;
}
/*没有收到std::bad_alloc错误*/
return 1;
}
全局对象的析构 (global objects destruction)
动态或静态加载的DLL现在都支持全局对象了,它们的析构函数也会被调用,当该DLL的引用数(reference count)为0时。
举例:
// glob_data.cpp
#include <iostream>
// class definition
class AClass
{
AClass()
{
std::cout << “ctor()” << std::endl; // inline constructor
}
~AClass()
{
std::cout << “dtor()” <<std::endl; // inline destructor
}
};
AClass GlobData; // 全局对象
int main()
{
std::cout << “main()” << std::endl;
}
输出结果
ctor
main
dtor
(题外话,偶就是碰到这个狗血问题才阅读这篇文档。S60的3rd和5th版本不支持全局对象的析构,特别是这里可能引发内存泄漏(PANIC ALLOC),所幸Symbian^3非常不完美地增加了这一支持。)
(虽然例子代码能释放全局对象,但偶在某处全局对象却始终无法调用析构函数,不过这个问题在其它代码不能重现,原因还没找到,同样的代码Android NDK和WM却都能,所以说它非常不完美。全局对象最好还是要手动释放。)
STL
增加了标准模板库的一些新特性。
基于STLPort v5.1.4
头文件位于${EPOCROOT}/epoc32/include/stdapis/stlportv5
必须使用库libstdcppv5.lib
Symbian^3对标准C++的支持相关推荐
- python标准库很丰富支持多种编程范式_基础班-第03天{python基础}
声明:内容来源于网络,本人只是在此稍作整理,如有涉及版权问题,归传智播客官方所有. 认识python(了解) 1.Python发展历史 起源 Python的作者,Guido von Rossum,荷兰 ...
- cryptojs aes加密每次结果不同_Javascript加密算法标准库,支持Nodejs+浏览器——crypto-js...
介绍 crypto-js是一个前端Javascript标准加密算法库,CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法.有时候项目涉及到的敏感数据比较多,为 ...
- python标准库很丰富支持多种编程范式_计算机考试简答题
1 .简述 python 的特点: Python 具有简单易学,免费.开源,可扩展性.可嵌人性和可移植性强,代码规范.代 码具有较好可读性, Python 标准库很丰富,支持命令式编程.面向对象程序设 ...
- 基于c++11新标准开发一个支持多线程高并发的网络库
背景 新的c++11标准出后,c++语法得到了非常多的扩展,比起以往不论什么时候都要灵活和高效,提高了程序编码的效率,为软件开发者节省了不少的时间. 之前我也写过基于ACE的网络server框架,但A ...
- 注意升级Oracle 19c:SE2标准版不再支持RAC
摘要:从Oracle 19c版开始,在标准第二版(SE2)中将不再支持Oracle RAC高可用功能,客户可以选择保留18C,而不会影响其当前的RAC配置.标准版从19C后限制更加苛刻. 点击原文链接 ...
- 【出题神器】口算大师全能标准版,支持自定义输出
介绍: 今天推荐一款驯兽神器<口算大师全能标准版> 软件免费.全能.无限制,作者支持无限分享. 网盘下载地址: https://zijiewangpan.com/rOA1iLK3fga 图 ...
- 完成OSS.Http底层HttpClient重构封装 支持标准库
OSS.Http项目对于.Net Standard标准库的支持已经迁移完毕,OSS开源系列两个最底层的类库已经具备跨运行时支持的能力.由于OSS.Http类库是几年前我参照RestSharp的思路,完 ...
- PS3支持的显示标准介绍
PS3的视频输出分别有: ① HDMI 1.3版本 02年推出HDMI 1.0版本以来,HDMI规范已经升级数次:2004年5月HDMI升级到HDMI 1.1版本 ,接着为了更好的兼容PC系统,HDM ...
- 北京昌平区高新技术企业培育支持标准,补贴10万
根据往年的各企业申报经验,北京昌平区高新技术企业培育支持标准,这为高新技术企业的发展提供了难得机遇,也提出了新的更高要求.以市场为导向.产学研联合,在规范的核算.激励.人财物保障的情况入不断投入研发费 ...
最新文章
- java接口返回值_java后台调用接口并返回值
- 1、cocos2d-x环境安装
- REST、RESTful 与 RESTful API
- AWS Elemental推出新一代基于云的直播视频服务
- 云服务器有什么好 能让云大佬们竞争如此激烈
- ReviewForJob(1)数据结构与算法分析引论
- 实时内核(Core)和实时操作系统(RTOS)有何不同?
- iOS开发之CALayer
- 以人为尊真我生活,Leave the world behind
- 阶段3 1.Mybatis_09.Mybatis的多表操作_2 完成account表的建立及实现单表查询
- [ACM训练] 算法初级 之 基本算法 之 枚举(POJ 1753+2965)
- 计算机组成原理秦磊华 pdf,_计算机组成原理_设计性实践教学模式研究_秦磊华.pdf...
- 简历空白怎么办?计算机专业应届生和在校生怎么写简历?
- js 实现大小写转换的方法
- 西安电子科技大学-概率论与数理统计大作业-概率论与数理统计在日常生活和社会经济中的应用
- python定义一个字符串变量_python基础入门语法和变量类型(一)
- 44学习自动化运维工具 Chef 的基本用法,包括厨师编写、节点管理
- 在Windows Server 2022系统上安装 Brother MFC-7450打印机驱动
- c语言程序设计账单,C语言课程设计——账单管理
- TIA博途中进行积分运算的具体方法
热门文章
- 软件测试从业 3 年+了,怎么兼顾 管理 与 自身成长?
- java贝叶斯分类器 开源_贝叶斯分类器
- 剑指offer面试题[7]-用两个栈实现队列
- git生成SSH密钥提示ssh文件不存在-已解决
- PAT甲级1022 map、set的使用
- 计算机的发展经历了选择题,计算机发展历程的相关选择题.doc
- mysql 事务 不同库_MYSQL数据库重点:事务与锁机制
- jdk 安装cmd运行java_windows下安装jdk,cmd下编译运行java程序一点心得
- php mysql cpu100_mysql进程占服务器cpu100%的解决方法
- hl3150cdn打印不了照片_如何在美国打印证件照片 (Passport Photos)?