2010-06-17 18 views
5

Duplicar posible:
What is the lifetime of a static variable in a C++ function?¿Cuándo se llama exactamente el constructor del objeto local estático?

Digamos que tenemos un código como este:

Some class { 
    Some() { // the ctor code } 
}; 

Some& globalFunction() 
{ 
    static Some gSome; 
    return gSome; 
} 

Cuando se ejecuta exactamente 'el código ctor'? En cuanto a las variables estáticas normales antes de main() o en el momento en que primero llamamos a 'globalFunction()'?

¿Cómo es en diferentes plataformas y diferentes compiladores (cl, gcc, ...)?

Gracias

-hb-

+1

Dupe http://stackoverflow.com/questions/246564/what-is-the-lifetime-of-a-static-variable-in-ac-function –

Respuesta

4

El constructor Some se llevará a cabo en la primera llamada a globalFunction(). Esto se discute en Effective C++ de Scott Meyer, artículo 4.

Esto se aplica por el estándar.

¡Tenga en cuenta que todavía puede haber un problema con el destructor! En general, no es posible saber cuándo es seguro eliminar este objeto, otro hilo (quizás el pasado principal) podría llamar a esta función después de que se haya destruido la estática local, por esta razón, estos objetos a menudo se "filtran" creando ellos con 'nuevo'.

Pero, también tenga en cuenta que crear objetos estáticos como este no es seguro para hilos de todos modos.

Los objetos estáticos globales se construirán antes que los principales, es un orden indefinido.

+0

Gracias Stephen, te puedo citar en un error de mozilla ¿comentario? –

+0

Esta pregunta me recordó a un excelente artículo sobre singletons y seguridad de hilos en C++: http://www.drdobbs.com/184405726 y http://www.drdobbs.com/184405772 – fingerprint211b

+0

@Honza: algo seguro, por favor comente con un enlace, me gustaría leerlo :) [nota: que hay (como siempre) algunos casos especiales para esto, especialmente la parte de seguridad del hilo ... por lo que en algunas condiciones especiales puede estar bien] – Stephen

Cuestiones relacionadas