当前位置: 网站首页 > 开发语言 > C/C++

Symbian手记【二】 —— Symbian对象构造

时间:1970-1-1 08:33:31来源: C/C++作者:admin 点击:0次 字体 [ С]

【二】 Symbian对象构造
C++的纯手工内存管理,确实是一个万恶之源。在对象构造时,有一个著名的内存泄漏隐患问题。比如一个类如下:
class A
{

public:
    A()
    {
        a1 = new T1();
        a2 = new T2();
        ...
        an = new Tn();
    }
private:
    T1 * a1;
    T2 * a2;
    ...
    Tn * an;
}
当你调用 new A() 进行分配的时候,一旦失败,可能导致内存的泄露。比如系统正吭哧吭哧分配到了a18,失败了,抛出异常了,或者返回空值了,前面a1 - a17个对象,就彻底成了没娘管的娃,一并泄漏了出去。一个解决策略是,管好每一个分配过的对象,一旦有问题,清空一切。比如 a18分配失败了,delete掉a1 - a17。且不说这么做有没有其他问题,但是这份苦力,估计就没多少人能够承受。
二阶段构造
为了解决对象分配的问题,Symbian琢磨了所谓的二阶段构造法,它是一个pattern,关键在于将对象中栈数据的初始化和堆对象的分配过程隔离开来。一个标准的二阶段构造类如下:

发表评论
验证码:
最新评论