民间,
我正在尝试跟踪网站上出现的间歇性错误。
我觉得这是在一些GDI代码中,我要凑齐一下才能使理货打印机工作。

我对如何删除此CDC感到困惑,我的代码对我来说还可以,但这是正确的。

// Create a device context for printing
CDC* dc = new CDC();
    if(! dc->CreateDC(safeDriverName.AsBSTR(), safePrinterName.AsBSTR(), NULL, NULL))
{
     throw . . .
}

// as I finish with the CDC
dc->DeleteDC();
delete dc;
delete dc之后需要dc->DeleteDC();吗?

谢谢

最佳答案

由于您在堆上分配了dc,因此,您确实需要删除dc。不仅如此,如果您将代码保持原样,则在抛出之前还应该添加一个delete dcDeleteDC函数与dc的分配内存无关。

您可以简化为:

// Create a device context for printing
CDC dc;
if(! dc.CreateDC(safeDriverName.AsBSTR(), safePrinterName.AsBSTR(), NULL, NULL))
{
     throw . . .
}

// as I finish with the CDC
dc.DeleteDC();

更新:如@Fred所述,CDC的析构函数将为您调用DeleteDC()

09-07 03:41