如何禁止在C++代码的某些部分使用 "new"?

How could I prohibit use of "new" in certain parts of C++ code?

本文关键字:些部 new 代码 何禁止 禁止 C++      更新时间:2023-10-16

是否可以防止在代码中的某些点使用new?

我正在开发的遗留代码有一个要求,即引导程序完成后没有动态内存分配。我们现在想测试一下。

如果我从零开始开发,那么我可以编写自己的包装器并使用它,或者在公共基类中重载运算符new。

有没有一种方法可以重载全局new,然后调用它?

不,你不能"重载"全局new-只替换它。但是,在替换中,你可以检查一个表示"新允许"的全局标志(如果没有设置该标志,则抛出异常(,并从调用代码内部更改该标志。这对类中重载的operator new没有帮助,除非您更改每个重载以尊重该标志。

不是重载,而是全局替换新的确实是可能的。

C++标准有一组预定义的新运算符和删除运算符。最常用的版本是:

void* operator new(std::size_t) throw(std::bad_alloc); 
void  operator delete(void*) throw(); 
void* operator new[](std::size_t) throw(std::bad_alloc);  
void  operator delete[](void*) throw();

前两个版本分配&解除分配对象的内存,最后两个用于对象数组。

如果您提供自己的版本,则称为,以替换标准库中的版本。

如果重载运算符new,则也应始终重载匹配运算符delete,即使它永远不会被您调用或使用。

您可能可以尝试:

#define new new(your imagination)

后来取消了它的定义取决于您的情况