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开发基础之内存管理相关推荐

  1. iPhone开发资料之内存管理 ,循环引用导致的内存问题

    iPhone开发资料之内存管理 ,循环引用导致的内存问题 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual ...

  2. 拒绝内存泄露,谈一些纯代码iPhone开发中的内存管理

    笔者刚从学校出来,算上实习期,接触iPhone开发已有半载,也算是对iPhone(iOS)开发中的内存管理有了些认识,由于开发中一直没有用Interface Builder,本文就谈谈纯代码iPhon ...

  3. 【24-业务开发-基础业务-品牌管理-图片管理-阿里云OSS服务开通和使用-阿里云OSS服务API使用-SpringCloudAlibaba OSS服务的使用】

    一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...

  4. Boost学习笔记(一)——Boost使用基础、内存管理

    一.Boost使用基础 Boost库的大部分组件(90%左右),不需要进行编译,直接包含头文件即可使用. #include <boost/logic/tribool.hpp> using ...

  5. LevelDB 源码剖析(三)公共基础:内存管理、数值编码、Env家族、文件操作

    文章目录 内存管理 Arena 结构 内存分配 内存使用率统计 TCMalloc Env家族 PosixEnv EnvWrapper InMemoryEnv 文件操作 SequentialFile W ...

  6. Objective-C基础3:内存管理续

    1.上篇我们讲了OC中的内存管理基础,我们再总结一下何时该用内存管理. 1)当用new.alloc.copy创建对象时,必须要释放对象. 2)当拥有对象时,如果是临时对象,不需要释放:当需要长时间保留 ...

  7. QGis二次开发基础 -- 构建图层管理器

    为了回应有些同学对上一篇博文的建议,这篇文章主要关注于QGis二次开发中的"图层管理器"的实现. 使用QGis构建独立应用系统,我相信大部分同学应该还是关注于GIS基本功能框架构建 ...

  8. Unity游戏开发中的内存管理_资料

    http://mp.weixin.qq.com/mp/homepage?__biz=MzAwMTUzOTczNQ==&hid=6&sn=44228b7260d7a5a3287a4499 ...

  9. java与c内存管理_Java基础--Java内存管理与垃圾回收

    Java自动内存管理 在讲解内存管理之前,首先需要了解对象和对象引用的区别 对象是类的一个实例,以人这个类为例,Person是我们定义的一个类 public class Person{} public ...

最新文章

  1. 浅谈悲催的“期末考试”
  2. hdu5441(2015长春网络赛E题)
  3. java内存系列:测试JDK最大内存
  4. iOS上传头像, 相册权限,相册权限,拍照上传,相册选择图片,拍照页面语言设置,保存到相册...
  5. c/c++教程 - 2.4.2.5 深拷贝和浅拷贝,堆区内存重复释放
  6. 如何使用反编译软件得到源码
  7. Matlab 输入输出命令
  8. Github 星标 8K+ 这款国人开源的 Redis 可视化管理工具,真香...
  9. 如何设计网页模板才简洁美观?
  10. Quant量化面试题 数学 逻辑题 过河、生日、烧绳、称重
  11. 华为鸿蒙系统穿戴app,华为应该如何盘活鸿蒙系统?
  12. NFM--FM的神经网络化尝试
  13. 【WebServerProgramming】Ch.1 网络因特网Web
  14. SSH服务移植到ARM单板
  15. win10 c 语言 全屏,win10所有的视频都不能全屏了,重装了好几次都是这样 ,求助 - Microsoft Community...
  16. jQuery遍历之closest()方法
  17. 苹果笔推荐购买吗?苹果平替笔推荐
  18. php向文件中写一行 换行,如何实现php向文件中写入换行
  19. 935. 骑士拨号器
  20. 安卓逆向高阶之frida hook java层

热门文章

  1. NO.2 QN9021 延时函数
  2. Network Dissection量化网络的可解释性(interpretability)
  3. 神经网络的可解释性——Network Dissection: Quantifying Interpretability of Deep Visual Representations
  4. 江苏理工学院2014年计算机网络技术教程的期末考试试题及答案,江苏理工学院2014年本科教学质量报告.pdf...
  5. Android开发技巧——设置系统状态栏颜色
  6. excel筛选排序从小到大_三分钟学会Excel排序功能,为你节省时间,注意收藏!...
  7. 使用UltralISO(软碟通)制作ubuntu系统的U盘启动
  8. 关于Unity的截图用rawimage有时候Anti Allasing报错不支持
  9. Android P 和 Android Q的适配
  10. 安徽信息技术初中计算机基础,初中信息技术 - 安徽省中小学教师教育网.ppt