bada开发基础之内存管理
1.两阶段构造
为了防止内存泄露,bada在构造对象时使用了两阶段构造,个人觉得bada的内存管理很大程度上借鉴了symbian。先让我们来看看bada文档上这段代码:
class SimpleClass;
class ComplexClass
{ public: ComplexClass(void) { p1 = new SimpleClass(); p2 = new SimpleClass(); // Out-of-memory error } ~ComplexClass(void) { delete p1; delete p2; } private: SimpleClass* p1; SimpleClass* p2;
}; void MyClass::SomeFunction()
{ // 调用构造函数,如果这里内存分配失败,其析构函数将不会被调用,也就是说会造成内存泄露ComplexClass a;
}
class TwoPhaseClass
{
public: TwoPhaseClass(void): p1(null), p2(null) { } ~TwoPhaseClass(void) { delete p1; delete p2; } result Construct(void) { p1 = new SimpleClass(); if(null == p1) { return E_OUT_OF_MEMORY; } //这里如果p2构造失败将调用p2的析构函数p2 = new SimpleClass(); if(null == p2) { delete p2; return E_OUT_OF_MEMORY; } return E_SUCCESS; } private: SimpleClass* p1; SimpleClass* p2;}; void MyClass::SomeFunction(){ // 第一阶段:调用构造函数,只是分配空间,这里不会抛出异常 TwoPhaseClass a;//第二阶段:调用Construct()方法,这里会构造两个SimpleClass实例result r = a.Construct();//方法结束,这里会调用a的析构函数,这里编译器会为你加上a.~TwoPhaseClass(),只是你看不见罢了}
以上代码直接从baba文档里拿来的,只是让大家了解一下baba的两阶段构造,不过说实话bada的编程规范实在不敢恭维
2.对象所有权策略(Object Ownership Policy)
在bada中,获得对象所有权有两个规则:
(1)new操作符会获得刚分配空间的所有权
(2)对象所有权可以被转移但不能共享,其实开发者也可以使用shared pointer只是bada SDK中他是这么要求自己的。
这是主要想说是bada系统中特有的N后缀,我们经常会看到有些方法的后缀是N后缀的,这里就是对象所有转移了,方法调用者要自己删除。
class A
{
public:
IList* SearchN(const String& criteria) const;
// Other methods declared here
};
IList* A::SearchN(const String& criteria)
{
// Search with criteria and return the results by storing them in the list
ArrayList* pList = new ArrayList(); // Add the search results to the list
return pList;
}
void MyClass::SomeMethod(void)
{
A a;
IList* pList = a.SearchN(L"Most popular"); // 要删除list
delete pList;
}
bada开发基础之内存管理相关推荐
- iPhone开发资料之内存管理 ,循环引用导致的内存问题
iPhone开发资料之内存管理 ,循环引用导致的内存问题 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual ...
- 拒绝内存泄露,谈一些纯代码iPhone开发中的内存管理
笔者刚从学校出来,算上实习期,接触iPhone开发已有半载,也算是对iPhone(iOS)开发中的内存管理有了些认识,由于开发中一直没有用Interface Builder,本文就谈谈纯代码iPhon ...
- 【24-业务开发-基础业务-品牌管理-图片管理-阿里云OSS服务开通和使用-阿里云OSS服务API使用-SpringCloudAlibaba OSS服务的使用】
一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...
- Boost学习笔记(一)——Boost使用基础、内存管理
一.Boost使用基础 Boost库的大部分组件(90%左右),不需要进行编译,直接包含头文件即可使用. #include <boost/logic/tribool.hpp> using ...
- LevelDB 源码剖析(三)公共基础:内存管理、数值编码、Env家族、文件操作
文章目录 内存管理 Arena 结构 内存分配 内存使用率统计 TCMalloc Env家族 PosixEnv EnvWrapper InMemoryEnv 文件操作 SequentialFile W ...
- Objective-C基础3:内存管理续
1.上篇我们讲了OC中的内存管理基础,我们再总结一下何时该用内存管理. 1)当用new.alloc.copy创建对象时,必须要释放对象. 2)当拥有对象时,如果是临时对象,不需要释放:当需要长时间保留 ...
- QGis二次开发基础 -- 构建图层管理器
为了回应有些同学对上一篇博文的建议,这篇文章主要关注于QGis二次开发中的"图层管理器"的实现. 使用QGis构建独立应用系统,我相信大部分同学应该还是关注于GIS基本功能框架构建 ...
- Unity游戏开发中的内存管理_资料
http://mp.weixin.qq.com/mp/homepage?__biz=MzAwMTUzOTczNQ==&hid=6&sn=44228b7260d7a5a3287a4499 ...
- java与c内存管理_Java基础--Java内存管理与垃圾回收
Java自动内存管理 在讲解内存管理之前,首先需要了解对象和对象引用的区别 对象是类的一个实例,以人这个类为例,Person是我们定义的一个类 public class Person{} public ...
最新文章
- 浅谈悲催的“期末考试”
- hdu5441(2015长春网络赛E题)
- java内存系列:测试JDK最大内存
- iOS上传头像, 相册权限,相册权限,拍照上传,相册选择图片,拍照页面语言设置,保存到相册...
- c/c++教程 - 2.4.2.5 深拷贝和浅拷贝,堆区内存重复释放
- 如何使用反编译软件得到源码
- Matlab 输入输出命令
- Github 星标 8K+ 这款国人开源的 Redis 可视化管理工具,真香...
- 如何设计网页模板才简洁美观?
- Quant量化面试题 数学 逻辑题 过河、生日、烧绳、称重
- 华为鸿蒙系统穿戴app,华为应该如何盘活鸿蒙系统?
- NFM--FM的神经网络化尝试
- 【WebServerProgramming】Ch.1 网络因特网Web
- SSH服务移植到ARM单板
- win10 c 语言 全屏,win10所有的视频都不能全屏了,重装了好几次都是这样 ,求助 - Microsoft Community...
- jQuery遍历之closest()方法
- 苹果笔推荐购买吗?苹果平替笔推荐
- php向文件中写一行 换行,如何实现php向文件中写入换行
- 935. 骑士拨号器
- 安卓逆向高阶之frida hook java层
热门文章
- NO.2 QN9021 延时函数
- Network Dissection量化网络的可解释性(interpretability)
- 神经网络的可解释性——Network Dissection: Quantifying Interpretability of Deep Visual Representations
- 江苏理工学院2014年计算机网络技术教程的期末考试试题及答案,江苏理工学院2014年本科教学质量报告.pdf...
- Android开发技巧——设置系统状态栏颜色
- excel筛选排序从小到大_三分钟学会Excel排序功能,为你节省时间,注意收藏!...
- 使用UltralISO(软碟通)制作ubuntu系统的U盘启动
- 关于Unity的截图用rawimage有时候Anti Allasing报错不支持
- Android P 和 Android Q的适配
- 安徽信息技术初中计算机基础,初中信息技术 - 安徽省中小学教师教育网.ppt