Question instanciation

statquant Messages postés 9 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 26 juillet 2007 - 26 juil. 2007 à 11:01
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 - 26 juil. 2007 à 17:32
Hello
Je me pose une petite question.
La classe ci dessous possede une methode public inlinée( on s'en fout) et static qui s'appelle GetInstance()

1. Est ce que le fait de l'appeler va automatiquement instancier un objet de type List AssetTrading ???
2. Si ce n'est pas le cas est ce que lors de differents appels differents *ListAssetTrading vont être créés
3. Je trouve cette facon de faire bizarre, vous avez souvent vu des trucs similaires ?


class ListeAssetTrading
{
friend class Selection;
friend class SelectionMultiple;
friend class Selection1;
friend class Strategie1;
friend void GetIntervalleTradingDay(SAMDate & Date1, int duree, SAMDate & Date2);


private:
//args
map<string,AssetTrading*> Assets;
static ListeAssetTrading * Instance; //instance unique
set AssetsPropres;
AssetTrading * Benchmark;
SAMDate EndFeries;
map Feries;
map<SAMDate,int> FeriesDates;

private:
//constructor
ListeAssetTrading()
:Benchmark(NULL),LeGerant(NULL),isBenchmark(false),isWeighted(false),isResultsInTick(false),
isTradingTagMap(false),criticalValue(3.43),RefIndex(string("")),isCapNumberLegsSet(false),
mCapNumberLegs(-1),BetaCutOff(0.01),BetaCutOffRatio(0.01),
offset_beta(false)
{tradingTagMap.clear();Univers.clear();Feries.clear();DebouclagePotentielOnly=false;} //constructeur privé

public:
//public args
bool offset_beta;
bool isWeighted;
bool isResultsInTick;
double criticalValue;
bool DebouclagePotentielOnly;
bool isBenchmark;
vector<double> ValeurCritique;

//Parameters driving the maximum net number of legs in which a stock can be involved
bool isCapNumberLegsSet;
int mCapNumberLegs;
//The trading map is here to replace the full day convention by a day/time tag for example, it makes it easier to read logs
bool isTradingTagMap;

string RefIndex;
double BetaCutOff;
double BetaCutOffRatio;
set<string> Univers;//Liste des noms des stocks de l'univers de travail
GestionFonds * LeGerant;

map, double > net_beta;
map, string > against_index;
map<string,double> weights;
map<long, string> tradingTagMap;
map, pair<double,double> > regresseurs;
map, pair<double,double> > tailles;

public:
~ListeAssetTrading()
{
set::iterator it = AssetsPropres.begin();
while(it != AssetsPropres.end()) { delete (*it); it++; }
Assets.clear();
}
//accesseurs

inline static ListeAssetTrading & GetInstance()
{
if(!Instance)
{
Instance = new ListeAssetTrading();
}
return *Instance;
}

AssetTrading& GetAsset(const string & s);
void AddAsset(AssetTrading *, bool IsBenchmark=false);
AssetTrading &GetBenchmark();

void SetBenchmark(AssetTrading * TheBench);
SAMDate GetDateRef(){return GetBenchmark().DateRef;}
SAMDate GetDateFin(){return GetBenchmark().DateFin;}
int GetFerie(SAMDate & When) {return Feries[NbDayBtw(GetDateRef(),When)];}
inline int GetFerie(int When){return Feries[When];}

//void Remove(const string & s);
string Describe();
string DescribeBetaDF();
string DescribePairesDF();
string Describe(SAMDate & When);
void CheckCoherence();
};

5 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
26 juil. 2007 à 11:55
Bon alors:
1- oui,un appel crée une instance s'il n'en existe pas déjà une.
2- non, puisqu'il y a création seulement s'il n'existe pas d'instance.
3- attention il n'y a pas de destruction automatique de l'instance créée donc risque de fuite mémoire. 

Au fait pas besoin de préciser inline quand le code est implémenté dans la définition, c'est automatique.
0
wismerhill__ Messages postés 88 Date d'inscription mercredi 1 juin 2005 Statut Membre Dernière intervention 26 juillet 2007
26 juil. 2007 à 12:12
1. Super merci
3. Yep c'est bien ce que je pense
2. ok... donc en fait appeler getinstance() de partout dans un projet me permet de modifier ( via un getinstance().unefonctionqcq() )l'objet instancié lors du premier premier appel de getinstance() ?
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
26 juil. 2007 à 13:33
Salut,

wismerhill__ -> Vi tu tape toujours sur ta première instance.

juju12 -> Implémentation dans la définition -> code inline ?

Tu peux le prouver stp ? Je vais regarder ça aussi de mon côté...
0
wismerhill__ Messages postés 88 Date d'inscription mercredi 1 juin 2005 Statut Membre Dernière intervention 26 juillet 2007
26 juil. 2007 à 16:15
Ok... je connaissais pas ca merci beaucoup !!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
26 juil. 2007 à 17:32
rt15 -> bof, ca vient d'un bouquin. Voilà la référence :
"Le language C++", Christine Eberhardt, p.65

"Noter que nous avons remplacé les prototypes des fonctions dans la déclaration de la classe directement par leur définitions  [....] elles sont alors considérées inline."

De toutes manières j'aime pas mettre l'implémentation dans le header même si ca fait qu'une ligne.
0
Rejoignez-nous