почему этот код ATL / COM проверяет успешное размещение? Я бы ожидал, что пользовательское распределение будет видно через CoGetALloc или некоторые другие API. Соответствующая стандартам среда выполнения C ++ должна генерировать std :: bad_alloc, но, опять же, возможно, распределитель действительно был продан за не бросающий импл.
DDClientData* pNewData = new DDClientData();
if (pNewData==NULL)
return E_OUTOFMEMORY;