如何在使用boost进行测试时定义自己的main()
函数?
Boost正在使用它自己的主要功能,但我使用的是自定义内存管理器,需要在分配任何内存之前进行初始化,否则我会收到错误。
答案 0 :(得分:12)
我不相信你真的需要你自己的主。我认为你用global fixture:
会好得多struct AllocatorSetup {
AllocatorSetup() { /* setup your allocator here */ }
~AllocatorSetup() { /* shutdown your allocator/check memory leaks here */ }
};
BOOST_GLOBAL_FIXTURE( AllocatorSetup );
答案 1 :(得分:8)
你必须定义
BOOST_TEST_NO_MAIN
。
BOOST_TEST_MAIN
是默认值。 http://www.boost.org/doc/libs/1_36_0/libs/test/doc/html/utf/compilation.html
答案 2 :(得分:0)
你可以定义一个静态对象,他的构造函数将在main:
之前执行class Alloc_Setup {
Alloc_Setup() {
// Your init code
}
~Alloc_Setup() {
// Your cleanup
}
};
Alloc_Setup setup;
int main() {} // (generated by boost)
答案 3 :(得分:-1)
可以在main
之前分配内存:
static int* x = new int(1);
int main() { return *x; }
你也可以让你的记忆管理员成为一个全局变量 但是您无法强制执行全局变量初始化的特定顺序。 (至少在标准C ++中)
在Windows中,您可以将内存管理器放入DLL中,它将在调用应用程序入口点之前进行初始化,但仍然可以在之前分配内存 - 另一个DLL或DLL的CRT。