请教一个MFC的CString类的问题

Silitex 2010-07-27 02:15:29
弱弱的问大家一个问题,有这么一个类:

class CUtility {
public:
static CString GetModulePath(HMODULE hModule = NULL);
}

CString CUtility::GetModulePath(HMODULE hModule /* = NULL */)
{
TCHAR buf[MAX_PATH] = {'\0'};
CString strDir, strTemp;

::GetModuleFileName( hModule, buf, MAX_PATH);
strTemp = buf;
strDir = strTemp.Left( strTemp.ReverseFind('\\') + 1 );
return strDir;
}


为什么我始终感觉这个函数用起来有风险,我的看法:
变量strDir没有修饰成static属性,在返回strDir,strDir指针所指向的空间已经被析构函数给释放了,这样它所指向的就是一个空闲区域的指针,
而程序在调用这个函数并访问这个空闲区域的时候,很容易出现意外?

因为对CString的掌握是在太薄弱,不知道大家的看法是怎样的?谢谢哈!
...全文
154 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Silitex 2010-07-27
  • 打赏
  • 举报
回复
不好意思,分数有点分配错了,不过也暂时只能够这样了!多谢大家啊!
Silitex 2010-07-27
  • 打赏
  • 举报
回复
结贴去了!
x2010072710 2010-07-27
  • 打赏
  • 举报
回复
应该是没问题的吧,我看不出问题来
饭fan有引力 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 loaden 的回复:]
返回的是一个临时对象,会重新分配空间.
你的担心是多余的.
[/Quote]

嘿嘿,这样说的很对的啊,这个不是你写的吗
DotCpp 2010-07-27
  • 打赏
  • 举报
回复
The CString assignment (=) operator reinitializes an existing CString object with new data.

放心吧,CString 的=操作已经为自己分配空间了。
「已注销」 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 silitex 的回复:]
返回的是一个临时对象,会重新分配空间. ==》有道理!看来解答了我的疑惑,呵呵!
[/Quote]
我建议你再了解一下返回值优化的知识。
这对设计代码还是有好处的。http://www.google.com.hk/search?hl=zh-CN&source=hp&q=%E8%BF%94%E5%9B%9E%E5%80%BC%E4%BC%98%E5%8C%96&btnG=Google+%E6%90%9C%E7%B4%A2&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=
偶是江湖中人 2010-07-27
  • 打赏
  • 举报
回复
strDir空间是释放了,但其地址返回了。可以给变量来引用。我们用的是返回值,又不是函数里面的strDir。
Silitex 2010-07-27
  • 打赏
  • 举报
回复
返回的是一个临时对象,会重新分配空间. ==》有道理!看来解答了我的疑惑,呵呵!
healer_kx 2010-07-27
  • 打赏
  • 举报
回复
你这个函数写的啊,。。。唉,写得挺好,要是我。。。也这么写。。。
ayw215 2010-07-27
  • 打赏
  • 举报
回复
static CString GetModulePath(HMODULE hModule = NULL);
======
返回的是个类,不是这个类的指针,也不是这个类的引用
so ,木有任何问题
系统在函数返回的时候会给你重新拷贝一份
「已注销」 2010-07-27
  • 打赏
  • 举报
回复
当然,根据VC的返回值优化原理,这个临时变量可以消除.
「已注销」 2010-07-27
  • 打赏
  • 举报
回复
返回的是一个临时对象,会重新分配空间.
你的担心是多余的.

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧