我发现了一段可疑的代码,并且我发现它在项目的大多数类中广泛使用。
这是一个
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++ 设置中,
new
应抛出 std::bad_alloc
而不是返回 nullptr
。如果没有更多上下文,就不清楚在您的特定实例中是否确实需要更改特定类的此行为,或者代码是否只是由讨厌异常的人编写的;然而,原作者写的是NULL
而不是nullptr
这一事实是间接证据,将其标记为“老派”,在某种程度上让我怀疑后者。