2012-09-21 800 views
8

¿Cómo puedo definir mi propia función main() cuando pruebo con boost?¿Función principal de prueba de la unidad de impulso?

Boost está usando su propia función principal, pero estoy usando un administrador de memoria personalizado y necesita ser inicializado antes de que se asigne cualquier memoria, de lo contrario recibiré errores.

+0

En C++, 'main' no es un método. – jalf

Respuesta

11

No creo que realmente necesite su propia fuente. Creo que está mucho mejor con global fixture:

struct AllocatorSetup { 
    AllocatorSetup() { /* setup your allocator here */ } 
    ~AllocatorSetup() { /* shutdown your allocator/check memory leaks here */ } 
}; 

BOOST_GLOBAL_FIXTURE(AllocatorSetup); 
+0

Para el propósito del PO, esto parece más apropiado. –

-1

memoria puede asignarse antes main:

static int* x = new int(1); 
int main() { return *x; } 

Y que podría hacer que su administrador de memoria una variable global, así,
pero no se puede hacer cumplir una orden específica de inicialización de variables globales. (en C++ estándar al menos)

En Windows, puede poner su administrador de memoria en una DLL, se inicializará antes de que se invoque el punto de entrada de la aplicación, pero aún puede haber otra cosa asignando una memoria: otra DLL, o CRT de su DLL.

+0

El orden de inicialización de globals está bien definido dentro de una única unidad de compilación, por lo que puede hacer cumplir cualquier orden que desee. Solo colóquelos en una única CU :) – Fiktik

0

puede definir un objeto estático y su constructor ejecutará antes principal:

class Alloc_Setup { 
    Alloc_Setup() { 
     // Your init code 
    } 
    ~Alloc_Setup() { 
     // Your cleanup 
    } 
}; 
Alloc_Setup setup; 
int main() {} // (generated by boost) 
+0

Eso es más un truco que una solución, además no le permite definir su propia función principal. No hay problema, encontré la respuesta. – ProgrammerAtWork