您的位置:首页 > 其它

慎用USES_CONVERSION

2011-01-20 13:47 253 查看
USES_CONVERSION是ATL中的一个
宏定义。用于编码转换(用的比较多的是CString向LPCWSTR转换)。在ATL下使用要包含头文件#include
"atlconv.h"

使用USES_CONVERSION一定要小心,它们从堆栈上分配内存,直到调用它的函数返回,该内存不会被释放。如果在一个循环中,这个宏被反复调用几万次,将不可避免的产生stackoverflow。

解决方法是:将用到该宏的语句独立封装成一个函数,这样就可以无限次调用了。
例:
void fn()
{


while (true)


{


USES_CONVERSION;


DoSomething(A2W("Something"));


}
}

改成------------------------------->
void fn2()
{


USES_CONVERSION;


DoSomething(A2W("Something"));
}
void fn()
{


while(true)


{


fn2();


}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: