main()
ブーストでテストするときに独自の関数を定義するにはどうすればよいですか?
ブーストは独自のメイン関数を使用していますが、カスタム メモリ マネージャーを使用しており、メモリを割り当てる前に初期化する必要があります。そうしないと、エラーが発生します。
main()
ブーストでテストするときに独自の関数を定義するにはどうすればよいですか?
ブーストは独自のメイン関数を使用していますが、カスタム メモリ マネージャーを使用しており、メモリを割り当てる前に初期化する必要があります。そうしないと、エラーが発生します。
実際に独自のメインが必要だとは思いません。グローバルフィクスチャを使用すると、はるかに優れていると思います:
struct AllocatorSetup {
AllocatorSetup() { /* setup your allocator here */ }
~AllocatorSetup() { /* shutdown your allocator/check memory leaks here */ }
};
BOOST_GLOBAL_FIXTURE( AllocatorSetup );
定義する必要があります
BOOST_TEST_NO_MAIN
ブーストが含まれる前に。
BOOST_TEST_MAIN
がデフォルトです。 http://www.boost.org/doc/libs/1_36_0/libs/test/doc/html/utf/compilation.html
静的オブジェクトを定義すると、そのコンストラクターが main の前に実行されます。
class Alloc_Setup {
Alloc_Setup() {
// Your init code
}
~Alloc_Setup() {
// Your cleanup
}
};
Alloc_Setup setup;
int main() {} // (generated by boost)
メモリは次の前に割り当てることができますmain
:
static int* x = new int(1);
int main() { return *x; }
また、メモリ マネージャーをグローバル変数にする
こともできますが、グローバル変数の初期化の特定の順序を強制することはできません。(少なくとも標準 C++ では)
Windows では、メモリ マネージャを DLL に入れることができます。アプリケーション エントリ ポイントが呼び出される前に初期化されますが、別の DLL または DLL の CRT の前に別の何かがメモリを割り当てる可能性があります。