【发布时间】:2021-11-24 10:38:44
【问题描述】:
我已经看到了这个答案 (Advantages of using std::make_unique over new operator),它指出:
如果您需要自定义删除器或采用其他地方的原始指针,请不要使用
make_unique。
这是我的代码:
void CAutomaticBackupSettingsPage::GetLastBackupDate(COleDateTime& rBackupDate)
{
DATE* pDatTime = nullptr;
UINT uSize;
theApp.GetProfileBinary(_T("Options"), _T("BackupLastBackupDate"), pointer_cast<LPBYTE*>(&pDatTime), &uSize);
if (uSize == sizeof(DATE))
rBackupDate = *pDatTime;
else
rBackupDate = COleDateTime::GetCurrentTime();
delete[] pDatTime;
pDatTime = nullptr;
}
代码分析给了我两个警告:
和
后一个警告建议我使用std::make_unique,但由于我的指针数据是从GetProfileBinary 调用返回的,并且鉴于相关问题中的陈述,这是否意味着我不应该使用std::make_unique?我承认这是我以前没有做过的事情。
GetProfileBinary的用法明确指出:
GetProfileBinary分配一个缓冲区并在*ppData中返回其地址。 调用者负责使用delete[]释放缓冲区。
【问题讨论】:
标签: c++ visual-c++ mfc code-analysis