是否可以阻止在代码中的某些点使用new?
我正在开发的遗留代码要求在引导程序完成后没有动态内存分配。我们现在想测试一下。
如果我从头开始开发,那么我可以编写自己的包装器并使用它,或者在公共基类中重载operator new。
有没有办法重载全局new然后调用它?
答案 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)
后来取消定义它 取决于你的情况