class unknow{
public:
operator int*() { return GetData();  }
int* GetData(){
int *p = new int(0);
return p;
}
};
int main(int argc, char* argv[]){
unknow u;
     int *p = u;
delete p;
return 0;
}
以上代码通过编译(VC6.0(SP5)+WIN2KPRO(SP4,IE6.0))
想请问有没有人看见过类似的代码,这段代码是我看过...MFCINCLUDEAFXTLS.H里的template<class TYPE>
class CThreadLocal : public CThreadLocalObject声明后仿写的,我不太清楚这个语法。能否帮我解释一下。

解决方案 »

  1.   

    operator int*() { return GetData();  }
    是运算符重载。
      

  2.   

    int *p = u; 相当于
    int *p = (int *)u;
    于是就调用了运算符重载函数
    operator int*() { return GetData();  }
    重载的是(int *)
      

  3.   

    operator int*() 这是用户自定义的类型转换,可以把你的unknow类类型转换为int *unknow u;
         int *p = u;中,当调用int *p = u;
    时,产生了隐式转,于是把u转话成了int *型你可以理解成在这个转换的过程中,调用了unknow ::operator int*() 这个类型转换函数