如题:不管函数里面是如何调用的,用&方式会减少莫名其妙的错误。
莫名其妙的错误
请看下面的两段所谓的代码
void CMyImage::CImageAsParameterReferTest(CImage &srcImg)
{
// Nothing here!
}
void CMyImage::CImageAsParameterValueTest(CImage srcImg)
{
// Nothing here!
}
再请看调用代码
CMyImage image;
CImage src;
src.Create(400, 400, 24);
int times = 9;// less than 9 both methods are correct
for (int i = 0; i < times; i++) {
image.CImageAsParameterValueTest(src);// wrong
//image.CImageAsParameterReferTest(src);//correct
}
CImage dst;
dst.Create(400, 400,24);
Graphics dstG(dst.GetDC());
Rect rect(0, 0, 400, 400);
Pen pen(Color::Red, 3);
dstG.DrawEllipse(&pen, rect);
m_pImgTabDlg->DrawPic(dst, 2);
dst.ReleaseDC();
代码很简单
就是画一个圆,期待结果如下:
当采用值引用时,得到的结果如下:
跟踪进去发现 graphics 实例化失败,不知道是为什么。或许是微软的bug。
说明:当值引用循环次数小于9时,结果也是对的。不知道这其中到底有什么缘由,望大虾指教。
不明所以的我,建议大家把CImage 当做参数时,全部采用值引用的方式,以防不测。
2020-04-18 于泛五道口地区