C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Re: static list in template

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Olaf Krzikalla
Guest





PostPosted: Mon Nov 03, 2003 11:55 am    Post subject: Re: static list in template Reply with quote



Hi,

Terence wrote:
Quote:
// begin test.cpp
#include <iostream
#include "test.h"
using namespace std;

template A<T>::alist;

template class A<L>;

static B *b_ex = new B(E());

int main() {
cout << A return 0;
}
// end test.cpp

Was passiert, wenn Du b_ex im main initialisierst:

int main()
{
B *b_ex = new B(E());
cout << A return 0;
}

Wenn es dann funktioniert und b_ex global sein muß, dann brauchst Du ein
->Singleton Pattern.
Das Ganze scheint ein Problem der Initialisierungsreihenfolge zu sein.
Im Allg. werden globale Variablen innerhalb einer Übersetzungseinheit in
der Reihenfolge ihrer Definition initialisiert. Nun wird zwar die
Instantiierung von A<L> explizit vor der Initialisierung von b_ex
angefordert, allerdings weiß ich nicht, ob damit auch alle statischen
Member dieser Instantiierung vor b_ex initialisiert werden.
Viele Compiler verschieben die Compilation von Instantiierungen an das
Ende einer
Übersetzungseinheit. Damit würde hier mittelbar auch die statische Liste
A<L>::alist erst nach b_ex (und damit zu spät) initialisiert werden.
Gibt es im Standard irgendwelche Auslassungen über dieses Problem?


MfG
Olaf Krzikalla

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Olaf Krzikalla
Guest





PostPosted: Tue Nov 04, 2003 11:09 am    Post subject: Re: static list in template Reply with quote



Hi,

Terence wrote:
Quote:
Was besagt das "Singleton Pattern" nochmals (vielleicht kleines
Code-Snippet wäre nett - veranschaulicht Prinzipien immer gut)?
Upps, ich dachte, das steht in unserer FAQ. Tut es aber nicht. Deswegen

hier ein Programmschnipsel:

class A { /*...*/ };

A& globalVar()
{
static A var;
return var;
}

int main()
{
globalVar().doSomething(); //Klammern nicht vergessen
}

Der Clou ist jetzt, dass 'var' als statische Variable einer Funktion
'globalVar' erst dann initialisiert wird, wenn diese Funktion das erste
Mal aufgerufen wird. Damit stimmt automatisch die
Initialisierungsreihenfolge (von abstrusen zyklischen Abhängigkeiten
abgesehen).
Man kann das jetzt noch verfeinern, wenn man wirklich nur eine Instanz
von A erlauben will, indem globalVar() zu einer statischen
Member-Funktion von A und alle c'tors von A privat werden.


Hth
Olaf Krzikalla

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Tue Nov 04, 2003 11:30 am    Post subject: Re: static list in template Reply with quote



Olaf Krzikalla wrote:

Quote:
Hi,

Terence wrote:
Was besagt das "Singleton Pattern" nochmals (vielleicht kleines
Code-Snippet wäre nett - veranschaulicht Prinzipien immer gut)?
Upps, ich dachte, das steht in unserer FAQ. Tut es aber nicht.
Deswegen hier ein Programmschnipsel:

class A { /*...*/ };

A& globalVar()
{
static A var;
return var;
}

int main()
{
globalVar().doSomething(); //Klammern nicht vergessen
}

Der Clou ist jetzt, dass 'var' als statische Variable einer Funktion
'globalVar' erst dann initialisiert wird, wenn diese Funktion das
erste Mal aufgerufen wird. Damit stimmt automatisch die
Initialisierungsreihenfolge (von abstrusen zyklischen Abhängigkeiten
abgesehen).

Dummerweise kann das beim Deinitialisieren dann Ärger machen. 100%ig
sicher ist das also nicht. Das steht zwar vieliecht nicht in der FAQ zu
dieser Gruppe, aber die zu comp.lang.c++ erklärt das recht gut. Siehe
http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.13

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.