在我当前的项目中,我使用自己的自定义分配器,其灵感来自 article on BitSquid 。我还替换了 new 和 malloc 以帮助我跟踪它们的使用位置(因为这应该最小化 - 目前没有在任何地方调用。)
我读到许多更成熟的 C++ 测试框架(例如 CppUTest)都依赖于它们自己的 new/malloc 重载。还有没有的吗?我的项目是跨平台的(Windows、Linux、Mac 和手机),如果有帮助的话。
(编辑:最初忘记提及我们不使用 Boost)
最佳答案
例如,Boost Tests 并不基于他自己的 new/malloc 重载,我实际上使用 BOOST TESTS 并且创建了 new/malloc 重载来查看(行和文件)内存泄漏发生的位置。
BOOST 是跨平台的,但由于我在 Windows 上进行所有开发,所以我使用了一些现有的类似 malloc 的函数 (crtdbg.h) 重载,并且只是重载了 new 运算符。如果您需要跨平台测试,您可以手动重载 malloc。
下面的代码是 .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 的某些部分(不是测试部分)重载了 new 运算符,并且我还有另一个库在内部重载了 new 运算符,因此通过将其包含在包含列表的末尾,我确信我不要弄乱我的库的内部结构。
http://www.boost.org/doc/libs/1_48_0/libs/test/doc/html/index.html
关于c++ - 哪些测试框架不会替换 "new"和 "malloc"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8795813/