假如你写了一个类MyObject 并且有一个该类的对象object:
MyObject object;
你现在想把一个指针赋值给object,很简单
大家都知道重载赋值运算符=号可以达到这个目的
class MyObject
{
void operator=(XXX* a)
{
.......
}
};
那么反过来呢,如果想把object赋值给某个指针pointer,也就是使下面的语句通过编译:
pointer=object;
该怎么办呢?
通过查资料,我发现有一种特殊的运算符重载即类型转换运算符。
operator int(), operator char*(), operator T*(),.............
如果想把object转换为int* ,重载operator int*()这货就可以啦:
class MyObject
{
public:
operator int*()
{
return m_InnerBuffer;
}
int *m_InnerBuffer;
};
这样写 int* a=object;这样的语句就能通过编译了。
这种运算符重载在普通指针和智能指针之间转换用的比较多
把智能指针转换成普通指针的方法除了显式提供GetPointer方法之外更简便的就是使用类型转换运算符重载(这里是重载operator T*(),T为模板参数):
mySmartPointer<int> p=new int;
int* rawpointer=p;
有些人说,简便的代价就是使用智能指针的时候会很容易误删掉隐性转换的指针。
我本人觉得见仁见智吧,我采用的办法是,设计函数的时候,约定内部没有删除操作的情况下才会把普通指针作为输入参数,这样就可以肆无忌惮的把智能指针转换成普通指针传进函数里了。