This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: ordering of constructors


Daniel Jacobowitz <drow@false.org> writes:

| On Fri, Apr 09, 2004 at 02:15:24PM +0200, Gabriel Dos Reis wrote:
| > For example, it can be something like
| > 
| >    A.H:
| >    struct A { some constructor ... };
| >    extern A a;
| >    void make_sure_a_is_constructed();
| > 
| >    A.C
| >    A a;
| > 
| >    void make_sure_a_is_constructed() { /* empty */ }
| > 
| > 
| > 
| >    B.H:
| >    #include "A.H"
| >    struct B { ... }
| > 
| >    B::B()
| >    {
| >       make_sure_a_is_constructed();
| >       // use a...
| >    }
| > 
| >    B.cc;
| >    B b; 
| >    
| > 
| > 
| > The call to make_sure_a_is_constructed(), will provoke the
| > initialization of a, before that function is executed.  
| 
| Er... for those of us ignorant, could you explain why this assures
| anything?

3.6.2/3

  It is implementation-defined whether or not the dynamic
  initialization (8.5, 9.4, 12.1, 12.6.1) of an object of namespace
  scope is done before the first statement of main. If the
  initialization is deferred to some point in time after the first
  statement of main, *it shall occur before the first use of any
  function or object defined in the same translation unit as the
  object to be initialized*. 

(emphasis is mine).

-- Gaby


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]