慎用USES_CONVERSION

本文介绍了ATL中的USES_CONVERSION宏定义及其用途,主要用于编码转换,特别是CString到LPCWSTR的转换。文中提醒开发者使用该宏定义时应注意内存管理,避免栈溢出,并提供了一个安全使用的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();

       }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值