哪些测试框架不能取代"new"和"malloc"?
Which test frameworks don't replace "new" and "malloc"?
在我当前的项目中,我使用自己的自定义分配器,其灵感来自BitSquid上的文章。我还替换了new和malloc,以帮助我追踪它们的使用位置(因为这应该被最小化——目前在任何地方都没有调用。)
我读到过许多更成熟的C++测试框架(例如CppUTest)依赖于它们自己的新malloc重载。有没有没有?如果有帮助的话,我的项目是跨平台的(Windows、Linux、Mac和手机)。
(编辑:最初忘记提到我们不使用Boost)
Boost测试并不是基于他自己的新malloc重载,我实际上使用了Boost测试,并且我创建了新的malloc过载来查看(行和文件)内存泄漏发生在哪里。
BOOST是跨平台的,但由于我所有的开发都是在windows上进行的,所以我使用了一些类似malloc函数的现有重载(crtdbg.h),并且只是重载了新的运算符。如果您需要跨平台的测试,您可以手动重载mallocs。
下面的代码是.h文件的内容,该文件是每个.cpp的最后一个包含的文件。
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif
我使用这种方法是因为boost的某些部分(而不是测试部分)重载了新操作符,而且我还有另一个库,它内部重载了新运算符,所以通过将其包含在includes列表的末尾,我确信我不会破坏库的内部。
http://www.boost.org/doc/libs/1_48_0/libs/test/doc/html/index.html
如果您不想包含Boost或新库,而只想确保分配/取消分配正确进行。按照以下步骤操作。1.让你的新衣服超载。2.在重载的new中添加引用计数机制。3.在测试用例中,使用assert检查开始和结束时的引用计数。
这可能看起来像是一个简单的设置,但将消除单元测试本身中许多可能的泄漏。
- 在使用malloc/new时无法编译stm32l4r5xx
- 如何使用 "new" 而不是 malloc 分配内存?
- Malloc vs New for Primitives
- 在C++中调用 malloc() 与"operator new"函数之间的实现差异
- 供应商是否将 new 和 malloc 实现为小型对象分配器
- 无法调用使用 malloc/placement new 创建的类上的虚函数
- 使用 new 而不是 malloc 分配 mem
- 使用 malloc 而不是 new 会导致 free():指针错误无效
- 正在使用new char[]或malloc的结果来铸造float*是UB(严格的混叠冲突)
- 此测试是否证明 malloc、calloc、new 在我的系统上管理自己的内存池?
- `delete []`on`int*````new'''给出了malloc错误
- 在混合 C/C++ 程序中协调 malloc 和 new 的"正确"方法是什么?
- 构造函数中的 Malloc 在通过 New 调用时返回 NULL
- 在 C++ 中将 malloc/free 替换为 new/delete
- "new int[5]"和"malloc(5 * sizeof(int))"之间的C++有什么区别?
- 如果通过委托给“malloc”的重载“new[]”分配,“释放”内存是否安全
- “new/malloc”应该“delete/free”的人
- 使用运算符 new/malloc 分配的内存块是否可以在程序执行结束后持续存在
- 当退出 new/malloc 函数时,从 new/malloc 返回的指针如何保持在范围内
- new/malloc 似乎如何记住分配的数据量