+ -
当前位置:首页 → 问答吧 → 慎用ATL::CString,慎用全局变量,不然都不知道怎么死的

慎用ATL::CString,慎用全局变量,不然都不知道怎么死的

时间:2011-12-26

来源:互联网

最近开发Windows Xp智能卡登录Gina,编译环境VS2008,碰到很奇怪的问题。。。
为了处理字符串方便使用的ATL::CString类
使用全局vector<CString>保存智能卡设备名,发现使用vector.empty()无法正常清空容器
set、map都有同样的问题,但是使用局部变量没问题。。。
最诡异的是ATL::CString简单的赋值操作,两个变量前后值都不一样。。。
在WTL中也发现类似的问题,Debug和Release都有这样的问题,应该不是编译器编译的时候给优化了

作者: lxl843   发布时间: 2011-12-26

不会吧
是不是你用的不对?

作者: fandh   发布时间: 2011-12-26

是你用的不对吧

作者: akirya   发布时间: 2011-12-26

用CStringArray试试。

作者: zyq5945   发布时间: 2011-12-26

应该不会是用错,我使用的都是STL和CString中常见的功能

作者: lxl843   发布时间: 2011-12-26

该回复于2011-12-26 17:30:29被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#6楼 得分:0回复于:2011-12-26 17:29:20
应该出了某种错误

作者: VisualEleven   发布时间: 2011-12-26

已经使用其他方法绕过这种问题
难道是引用的头文件冲突或者编译选项没设好
不过这种诡异的问题实在太坑爹了

作者: ouyh12345   发布时间: 2011-12-26

用过很多的ATL:CString,从未遇到LZ说的问题。

作者: lxl843   发布时间: 2011-12-26

vector.empty()是判断是否为空。
vector.clear()才是清空容器

作者: r3000   发布时间: 2011-12-26

应该不可能吧。
可能还是用得不对。
你是不是把vector中的值读出来改变了,然后没有真正改vector中的CString?

作者: wqvbjhc   发布时间: 2011-12-26

empty 用于清空??
如果这个函数用于清空,那么程序岂不崩溃了。

作者: aa_qq110   发布时间: 2011-12-26