今天碰到一个C++问题,体现了基础知识不够好。在这里总结一下问题的来龙去脉。 首先我参照SAFE_DELETE(这个MACRO应该用过微软C++的都熟悉)写了一个SAFE_DESTROY_DELETE。用于传入CWnd*后先DestroyWindow再delete指针。 [c light=”false” toolbar=”false”] void SAFE_DESTROY_DELETE(CWnd* pWnd) { if (pWnd) { if (::IsWindow(pWnd)) { pWnd->DestroyWindow(); } SAFE_DELETE(pWnd); } } [/c] 在写这个函数的时候我只是想到不要用Macro,这样可以有一个编译器的类型检查。这里面其实有一个比较低级的错误。开始没发现,你能看出来吗? 然后发现这个错误后我试图把函数修改一下,为了不动到其他会调用此函数的地方,我灵机一动,改了一处,觉得应该就可以了。修改后如下: [c light=”false” toolbar=”false”] void SAFE_DESTROY_DELETE(CWnd* &pWnd) { if (pWnd) { if (::IsWindow(pWnd)) { pWnd->DestroyWindow(); } SAFE_DELETE(pWnd); } } [/c] 编译后发觉一堆错误。VC2010的错误信息如下: error C2664: ‘SAFE_DESTROY_DELETE’ : cannot convert parameter 1 from ‘ B* ‘… Continue reading C++函数传引用问题一则