This is the mail archive of the 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: Attribute destructor function and C++ destructors

Hi Eljay,

Thankyou for the reply.

> My first recommendation is, if possible, never ever ever ever ever 
> ever ever rely on "stuff that happens before main()", and "stuff 
> that happens after main()".  Put explicit initialization in main 
> using RAII.  Life will be better.

I'm not sure what RAII is, will have to look it up.  However the
initialisation/finalisation I wanted to happen automatically on
shared library load/removal.

> Are the globals in the same translation unit (i.e., static 
> globals)?  If they are, they are slightly better behaved than if 
> the statics are being used across translation units.

They are static and in the same execution scope.  They are also not
passed as pointers outside that scope.  Ignoring specific syntax
the code in question basically amounts to:

static std:string test;

foo_init () << attribute constructor
    test = "hello";

foo_fini () << attribute destructor
    printf ("%s\n", test.c_str()); <<< invalid on 4.1.1

> If the static globals are in the same translation unit, where you 
> place them in the translation unit determines their OoC and LIFO 
> OoD.  If they do not have external linkage (extern globals), then 
> you can rely on their OoC.

Ok.  Normally I'm used to the listed first, created first/destructed last
approach, which I believe should make the above correct.  How would
you change order correctly between C++ destructors and an attribute
destructor function?

> If you are still running into problems, consider using the Nifty 
> Counter pattern (aka Schwarz counter), which is what the I/O 
> Streams use:

I'll take a look, thankyou.



Search for products and services at:

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