最近在网上看到关于利用operator进行隐式类型转换的方法,示例如下:
class A
{
public:
operator bool(void)
{
return b;
}
private:
bool b;
};
void main(void)
{
A a;
bool b;
if(a)
{
b = ! a;
}
}
这样的话类A 可以直接当作bool使用,这种方法在对一些基本类型的封装非常有效。
我们知道在使用new分配对内存的时候,很容易忘记回收造成内存泄漏,在C++标准模板库中建议使用std::auto_ptr或者boost::shared_ptr智能指针来达到自动释放内存的效果。但对于不是释放内存而像HANDLE这样使用完需要CloseHandle的数据类型,使用智能指针的话最后并不能自动调用CloseHandle。用这种隐式转换的方法对HANDLE进行一次封装,在析构函数中调用CloseHandle,这样在对象析构的时候可以达到自动CloseHandle的目的。看下面的代码实现:
#include "stdafx.h"
#include <windows.h>
#include <string>
#include <vector>
class MyHANDLE
{
public:
MyHANDLE( HANDLE _handle ): handle( _handle ){}
~MyHANDLE()
{
if ( handle != NULL )
{
CloseHandle( handle );
}
}
operator HANDLE();
private:
HANDLE handle;
};
int _tmain(int argc, _TCHAR* argv[])
{
std::string test = "testHandle";
MyHANDLE handle( ::CreateMutex( NULL, TRUE, reinterpret_cast<LPCWSTR>(const_cast<char*>(test.c_str())) ) );
//当变量被释放时自动调用析构函数并执行CloseHandle。
return 0;
}
http://joyloft.net/?p=484
http://www.adintr.com/program/article/05.oper.html
http://www.pconline.com.cn/pcedu/empolder/gj/c/0503/581281.html
本文介绍了一种利用C++中的operator进行隐式类型转换的方法,并通过实例展示了如何使用这种方式封装HANDLE,以便在对象析构时自动调用CloseHandle。此外还探讨了这种方法在资源管理上的应用。
753

被折叠的 条评论
为什么被折叠?



