Могу ли я получить тип объекта, для которого новый оператор используется внутри перегруженного нового оператора? - PullRequest
2 голосов
/ 25 марта 2019

Ну, у меня есть перегрузка этой функции:

static bool returnNull;    
void* operator new(const std::size_t size, const std::nothrow_t&) noexcept
{
    void* address{ nullptr };
    if (!returnNull)
    {
        address = operator new(size);
    }
    return address;
}

И я хочу сделать что-то вроде:

void* operator new(const std::size_t size, const std::nothrow_t&) noexcept
{
    if (typeObject == AnimalClass)
        return nullptr;
    void* address{ nullptr };
    if (!returnNull)
    {
        address = operator new(size);
    }
    return address;
}

Итак, мне нужна эта функциональность для модульного тестирования сборщика, у которого много новых вызовов, поэтому я хочу провалить определенное распределение на основе класса, который должен быть выделен

1 Ответ

0 голосов
/ 25 марта 2019

То, что делает ваш код, может быть достигнуто с помощью new перегрузки операторов для класса AnimalClass:

class AnimalClass
{
public:

   #ifdef UNIT_TEST
   void* operator new(size_t)
   {
      return nullptr;
   }
   #endif
};

Вы можете использовать директиву препроцессора #ifdef, чтобы сохранить код вне тестов. Определите UNIT_TEST перед заголовком, включая.

...