我可以获得在重载的新运算符中使用新运算符的对象类型吗?

问题描述 投票:2回答:1

好吧,我有这个函数重载:

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;
}

所以,我需要这个功能来单元测试一个有很多新调用的构建器,所以我想基于应该被分配的类失败一个特定的分配

c++ c++11 types overloading new-operator
1个回答
0
投票

您的代码可以通过new运算符重载类AnimalClass来实现:

class AnimalClass
{
public:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.