Symbian CleanupStack
来源:互联网 发布:mac图片 预览 全屏 编辑:程序博客网 时间:2024/05/16 02:28
CMyClass* CMyClass::NewL(TInt aBufSize)
{
CMyClass* self = new (ELeave) CMyClass;
self->ConstructL(aBufSize);
return self;
}
上面这段代码的问题是,如果ConstructL()这个函数Leave了,那么self指针指向的内存空间就没有办法回收了。因为这时返回的self的值是0,也即NULL。为了解决类似这样的问题,我们引入Cleanup stack的概念。我们的想法是,对于那些需要分配内存,但有可能发生leave的局部对象,先将它放到Cleanup stack上,如果真的发生了leave的话,Cleanup stack上面的对象会被自动删除,这样就解决了上面的问题。但同时又引起了另外一个问题:如果没有发生leave呢?如果我们一直往Cleanup stack上放对象,但一直都没有leave发生,因而没有对象被删除,那我们的栈岂不是越压越深,直到溢出?为了更完美的解决上面所有的问题,Symbian操作系统要求开发人员压栈之后必须保证出栈,否则将报错。
所以修改后的代码是:
CMyClass* CMyClass::NewL(TInt aBufSize) { CMyClass* self = new (ELeave) CMyClass; CleanupStack::PushL(self); self->ConstructL(aBufSize); CleanupStack::Pop(self); return self; }
- Symbian CleanupStack
- Symbian 清除栈 CleanupStack
- Symbian CleanupStack工作机制解析
- Symbian CleanupStack工作机制解析
- Symbian CleanupStack工作机制解析
- Symbian CleanupStack工作机制解析[1]
- Symbian CleanupStack工作机制解析[2]
- Symbian异常三步曲之二:清除栈(CleanupStack)
- Symbian异常三步曲之二:清除栈(CleanupStack)
- 从Symbian C++到Qt编程的注意事项(1)--CleanupStack与对象树
- 学习 CleanupStack
- 学习 CleanupStack
- 学习 CleanupStack
- 学习 CleanupStack
- Symbian
- symbian
- symbian
- symbian
- extern
- “无法连接到打印机。您输入的打印机名不正确 或者指定的打印机没有连接到服务器上”终极解决方法
- WEB前端高性能优化之JavaScript优化
- 键盘键码值
- oracle模拟院校招生系统招生录取的过程(packages)
- Symbian CleanupStack
- web前端页面性能优化
- 用C#创建COM组件全过程
- 天气雷达数据压缩算法设计
- 键盘键与虚拟键码对照表
- HttpClient 学习整理
- 搞笑银行对话
- javascript图片浏览器的核心——图片预加载
- 正式评估时被访谈人员应该注意什么?[收藏]