摘要: 问题:清除栈能保证对象在使用过程中发生异常退出而不泄露内存,但是如果对象构造期间发生了异常退出,怎么办?首先介绍下new:new(ELeave) 为new操作符的重载版本,注意,被重载的是 operator new。new的操作分为3个部分: ① void *memory = operator new (sizeof(CMyClass), ELeave); (内存分配) ② call CMyClass::CMyClass() on *memory; (编译器调用构造函数) ③ CMyClass *myclass = static_cast<CMyClass *>(memory); 阅读全文
posted @ 2011-08-17 10:26 RyanminKy 阅读(174) 评论(0) 推荐(0)
摘要: Symbian解决内存泄露的机制:Cleanup Stack概念:构造一个全局堆栈,用来记录类对象指针。每实例化一个对象,则将对象指针备份到这个堆栈中,程序go on。最终两种情况:①所有函数执行完毕,从堆栈中将这个指针弹出销毁。②函数异常退出,则由备份指针将对象销毁。由此避免内存泄露。使用:CleanupStack是静态类,使用前应安装一个清除栈,即实例化 CTrapCleanup类对象。 CTrapCleanup *cleanup = CTrapCleanup::New(); TRAPD(mainError,DoStartL()); delete cleanup;So,对每一个使用New 阅读全文
posted @ 2011-08-17 10:03 RyanminKy 阅读(140) 评论(0) 推荐(0)
摘要: 来自 :http://blog.csdn.net/keggle/article/details/531896委托 delegate是只有一个函数的特殊的类委托对象的引用相当函数指针delegate 声明定义一种引用类型,该类型可用于将方法用特定的签名封装。委托实例封装静态方法或实例方法。委托大致类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。委托使您得以将函数作为参数传递。委托的类型安全要求作为委托传递的函数拥有同委托声明相同的签名使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给某个方法,而不必在编译时知道将调用哪个方法。与 C 或 C++ 中的函数指针不 阅读全文
posted @ 2011-08-09 11:55 RyanminKy 阅读(198) 评论(0) 推荐(0)