我可以获取在重载的new运算符内使用new运算符的对象的类型吗?

时间:2019-03-25 11:49:39

标签: c++ c++11 types overloading new-operator

那么我有这个函数重载:

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 :(得分:0)

newAnimalClass的操作符重载可以实现代码的作用:

class AnimalClass
{
public:

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

您可以使用#ifdef预处理程序指令将代码保留在测试范围之外。在标头包含之前定义UNIT_TEST