重载类的“new”和“delete”运算符以返回“new char[]”,会有害吗?

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

我发现了一段可疑的代码,并且我发现它在项目的大多数类中广泛使用。

这是一个

new
delete
重载,如下所示:

void* MyObject::operator new ( size_t  size )
{
    return ( size == 0 ? NULL : new char[size] ) ;
}

void* MyObject::operator new[] ( size_t  size )
{
    return ( size == 0 ? NULL : new char[size] ) ;
}

void MyObject::operator delete( void *p )
{
    char* l_tmp = (char*)p;
    delete[] l_tmp;
}

void MyObject::operator delete[]( void *p )
{
    char* l_tmp = (char*)p;
    delete[] l_tmp;
}

这会对内存、速度或稳定性造成任何损害吗?

这有什么意义吗?

c++ memory-management operator-overloading new-operator delete-operator
1个回答
0
投票

在大多数符合标准的 C++ 设置中,

new
应抛出
std::bad_alloc
而不是返回
nullptr
。如果没有更多上下文,就不清楚在您的特定实例中是否确实需要更改特定类的此行为,或者代码是否只是由讨厌异常的人编写的;然而,原作者写的是
NULL
而不是
nullptr
这一事实是间接证据,将其标记为“老派”,在某种程度上让我怀疑后者。

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