起因:项目代码检查
指出这段代码:newが使用されています。
/// 初期化処理
VOID
PHMI_MAINT_EZMyCarSettingOperationServiceIF::OnInitialize() noexcept
{
// PHMI_MAINT_EZMyCarSettingOperationServiceIFのインスタンス生成
if (nullptr == m_MAINT_EZMyCarSettingOperationService) {
m_MAINT_EZMyCarSettingOperationService = new(std::nothrow) PHMI_MAINT_EZMyCarSettingOperationService();
}
// PHMI_MAINT_EZMyCarSettingOperationServiceの初期化
if (nullptr != m_MAINT_EZMyCarSettingOperationService) {
m_MAINT_EZMyCarSettingOperationService->OnInitialize();
}
}
后发现代码中使用的是:new (std::nothrow)
普通new一个异常的类型std::bad_alloc。这个是标准适应性态。平时一直使用new但是在内存分配失败的时候直接报异常。在内存不足时,new (std::nothrow)并不抛出异常,而是将指针置NULL。std::nothrow可以实现对非零指针的检查。
在实际开发中,内存的分配失败是非常普通的,它们通常在植入性和不支持异常的可移动的器件中发生更频繁。因此,应用程序开发者在这个环境中使用nothrow new来替代普通的new可以更加安全