如何禁止在C++代码的某些部分使用 "new"?
How could I prohibit use of "new" in certain parts of C++ code?
是否可以防止在代码中的某些点使用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)
后来取消了它的定义取决于您的情况
相关文章:
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 重载运算符new[]的行为取决于析构函数
- 过载'operator new'如何导致无限循环?
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- 创建具有 new in 函数和"this is nullptr"异常的对象
- Codelite C++ new project
- 如何将部分流作为参数传递
- 在类c++中使用new声明数组
- g++用户定义的动态链接库上的全局new和delete运算符
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
- 在将 new 与指针一起使用时,创建数组的指定长度
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- 为什么我的全局 new() 覆盖被绕过了?
- 声明C++数组(带或不带 "new" 关键字)
- 在C++中,如果我可以直接将整数分配给指针而不使用"new",为什么要使用"new"?
- 是否可以使用 new 指定具有宏常量的动态分配数组的元素?
- 有没有办法修改'operator->',以便'z->im'返回复数的虚部
- constexpr new 如何分配内存?
- 放置 new 和 uninitialized_fill() 的行为