警惕利用类的构造和析构函数来做资源分配释放时候,对临时变量的使用
2012-08-10 10:18
274 查看
有一个类
下面是调用
真相
test函数中前两个调用是对的,在func1和func2中能得到正确的字符串,后两个是错误的,执行完这一行后马上就会执行类的析构函数,所以lpP1,lpP2不会指向真正的字符串。
class CMiRegularPath { public: CMiRegularPath(LPCTSTR lpPath); ~CMiRegularPath(); operator LPCTSTR (); operator LPTSTR(); protected: LPTSTR m_lpPathBuffer; LPCTSTR m_lpPath; LPCTSTR m_lpPathRegular; };
下面是调用
void func1(LPTSTR lpPointer) { } void func2(LPCTSTR lpPointer) { } void test { func1(CMiRegularPath(_T("D:\\aa/AS"))); func2(CMiRegularPath(_T("D:\\aa/AS"))); LPTSTR lpP1 = CMiRegularPath(_T("D:\\aa/AS")); LPCTSTR lpP2 = CMiRegularPath(_T("D:\\aa/AS")); }
真相
test函数中前两个调用是对的,在func1和func2中能得到正确的字符串,后两个是错误的,执行完这一行后马上就会执行类的析构函数,所以lpP1,lpP2不会指向真正的字符串。
相关文章推荐
- RAII:在类的构造函数中分配资源,在析构函数中释放资源
- 释放资源:讨论Dispose和析构函数的使用
- 利用dstat来监控Linux系统资源使用情况——超级【赞】
- 不使用临时变量的变量交换算法
- Ubuntu使用教程:E: 无法获得锁 /var/lib/apt/lists/lock - open (11 资源临时不可用)
- sql server中如何创建,使用,释放临时表
- Ubuntu使用教程:E: 无法获得锁 /var/lib/apt/lists/lock - open (11 资源临时不可用)
- Flash AS3.0 Socket资源(6)——处理使用Sockets时候引发的错误.
- 使用 boost::shared_ptr 时,善用 make_shared 而非 new operator 去动态分配资源
- 关于利用死锁定理关于化简资源分配图(RAG)算法中“两不点”备忘
- C++ 动态分配资源的自动释放 – auto_ptr的实现原理
- Ubuntu使用教程:E: 无法获得锁 /var/lib/apt/lists/lock - open (11 资源临时不可用)
- <重构>读书笔记之<使用查询替换临时变量>
- 关于构造函数析构函数以及成员变量内存分配顺序的一些问题
- Pthread创建线程后必须使用join或detach释放线程资源
- C++语言 在析构函数中释放类中的资源
- Win32 API资源分配释放速查(转)
- 关于利用死锁定理关于化简资源分配图(RAG)算法中“两不点”备忘
- c#:使用using关键字自动释放资源未必一定就会有明显好处
- 总结一下函数开始分配资源怎么在多条件返回时释放资源