摘要:
问题:清除栈能保证对象在使用过程中发生异常退出而不泄露内存,但是如果对象构造期间发生了异常退出,怎么办?首先介绍下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)
浙公网安备 33010602011771号