我怎么能禁止在C ++代码的某些部分使用“new”?

时间:2011-07-06 07:46:10

标签: c++ memory memory-management new-operator

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

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

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

有没有办法重载全局new然后调用它?

3 个答案:

答案 0 :(得分:5)

不,你不能“超载”全球new - only replace it。但是,在您的替换中,您可以检查全局标志,意味着“允许新”(并且如果未设置该标志则抛出异常)并从调用代码内部更改该标志。这对于类中的重载operator new无效,除非您将每个重载更改为也尊重该标志。

答案 1 :(得分:2)

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

C ++标准具有一组预定义的new和delete运算符。最常用的版本是:

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,即使您永远不会调用或使用它。

答案 2 :(得分:0)

你可以试试:

#define new new(your imagination)

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