假如你写了一个类MyObject 并且有一个该类的对象object:
MyObject 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; };
这种运算符重载在普通指针和智能指针之间转换用的比较多
把智能指针转换成普通指针的方法除了显式提供GetPointer方法之外更简便的就是使用类型转换运算符重载(这里是重载operator T*(),T为模板参数):
mySmartPointer<int> p=new int; int* rawpointer=p;
我本人觉得见仁见智吧,我采用的办法是,设计函数的时候,约定内部没有删除操作的情况下才会把普通指针作为输入参数,这样就可以肆无忌惮的把智能指针转换成普通指针传进函数里了。
原文:http://blog.csdn.net/a63140180/article/details/19052423