IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Désallouer correctement un tableau d'objets


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut Désallouer correctement un tableau d'objets
    Bonjour

    je gallère sur la libération un tableau d'objet.

    j'ai 1 classe mére abstraite avec :
    un tableau d'objet
    un methode init et unload qui alloue et libére le tableau
    et 2 objets derivées qui appel successivement init puis unload

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    void Screen::Init(uint8_t NumberOfButton){
    	Serial.print("Init CircleScreen");
     
    	numberOfButton = NumberOfButton;
    	buttons = new RButton*[numberOfButton];
    	/*for (int i = 0; i < numberOfButton; i++)
    	{
    		buttons[i] = new RButton();
    	}*/
    }
     
     
    void Screen::Unload(){
    	Serial.println("unload Screen");
    	Serial.print("buttons number");Serial.println(numberOfButton);
     
    	Serial.println("unload buttons array");
    	/*for (int i = 0; i < numberOfButton; i++)
    	{
    		delete [] buttons[i];
    	}*/
    	delete [] buttons;
     
    	numberOfButton = 0;
    }
    lors de l'appel sur la methode unload sur le deuxieme objet mon programme s'arrete (dernière trace "unload buttons array") et d'ailleur je n'ai pas l'impression que le destructeur de RButton soit appelé.

    autre point je n'ai peux pas utiliser la std.

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 154
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    à chaque new doit correspondre delete
    à chaque new[] doit correspondre delete[]
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut
    j'ai modifié mon code sur cette partie et je suis arrivé à une autre erreur

    sur la liberation d'un type char**

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	Serial.println("unloading text");
    	for (int i = 0; i < _numberOfLine; i++)
    	{
    		Serial.print("unloading text line");Serial.println(i);
    		delete [] _textlines[i];
    		Serial.print("unloaded text line");Serial.println(i);
     
    	}
    	delete [] _textlines;
    	Serial.println("unloaded text");
    je m'arrete sur delete [] _textlines[i];, j'ai egalement essayé avec un free

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Difficile de dire ce qui ne va pas avec le peu de code que tu nous montres.

    Mais globalement, tu ne devrais pas avoir à te poser ce genre de questions. En C++, un tableau de chaînes de caractères, c'est std::vector<std::string>. Et aucune désallocation de mémoire à gérer à la main.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut
    Je vous mettrai plus de code demain, il faut que vérifie mais je pense pas avoir accès à la std::vector

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 154
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par jeff_! Voir le message
    delete [] _textlines[i];
    Ca ressemble un peu trop à l'erreur du premier post pour être une coïncidence...
    Relis vraiment ton code et retiens la simple règle que j'énonce dans mon premier post.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Sinon, pense à toujours initialiser tes pointeurs à NULL dans le constructeur, et mets les à NULL après les avoir deleté.

    Je me demande si tu n’essaies pas tout simplement de libérer un pointeur non-alloué, cela te permettra de le vérifier.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut
    Voici le code complet de la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    #include "Text.h"
    #include "UTFTFactory.h"
     
     
    RText::RText(uint8_t numberOFLine,Alignement alignement,font* textfont){
     
    	this->_numberOfLine = numberOFLine;
    	this->_alignement = alignement;
    	this->_numberOfLineCounter=0;
     
    	this->_textlines = new char*[_numberOfLine];
    	this->_interligne = 5;
    	for (int i = 0; i < _numberOfLine; i++)
    	{
    		this->_textlines[i] = "";
    	}
    	RUTFT* tft = UTFTFactory::GetInstance();
    	if( textfont == NULL)
    		this->_font = new font(tft->getFont(),new RGB(255,255,255));
    	else
    		this->_font = textfont;
     
    }
    void RText::AddLine(char* line){
    	if( this->_numberOfLineCounter< this->_numberOfLine){
    		_textlines[_numberOfLineCounter] = line;
    		_numberOfLineCounter++;
    	}
    }
    void RText::Write(uint8_t x,uint8_t y,uint8_t width){
    	RUTFT* tft = UTFTFactory::GetInstance();
    	tft->setFont(this-> _font->_font);
    	tft->setColor(this->_font->fontColor->R,this->_font->fontColor->G,this->_font->fontColor->B);
    	uint8_t text_x,text_y;
    	text_y = y + tft->getFontYsize()+_interligne;
    	double Charbyline = ceil(width / tft->getFontXsize());
     
    	for (int i = 0; i < _numberOfLine; i++)
    	{
    		if( strlen(_textlines[i] )<= Charbyline){
    			this->WriteLine(tft,_textlines[i],x,text_y,width);
    		}else{
    			double iteration = ceil(strlen(_textlines[i] )/Charbyline);
    			String str = String(_textlines[i]);
    			for (int i = 0; i < iteration; i=i+Charbyline)
    			{
    				String part = str.substring(i*Charbyline,((i+1)*Charbyline -1));
    				this-> WriteLine(tft,part,x,text_y,width);
    				text_y = text_y+tft->getFontYsize()+_interligne;
    			}
    			str = NULL;
    		}
    		text_y = text_y+tft->getFontYsize()+_interligne;
    	}
    }
     
    void RText::RefreshLine(uint8_t index, char* text){
     
    	if(index < this->_numberOfLine){
    		this->_textlines[index] = text;
    	}
    }
     
     
    void RText::WriteLine(UTFT* tft,String text,uint8_t x ,uint8_t y,uint8_t width){
     
    	char *buf= new char[text.length()+1];
    	text.toCharArray(buf, text.length()+1);
    	WriteLine(tft,buf,x,y,width);
    	free(buf);
    }
     
     
    void RText::WriteLine(UTFT* tft,char* text,uint8_t  x ,uint8_t y,uint8_t width){
     
    	switch (_alignement)
    	{
    	case Alignement_LEFT:
    		break;
    	case Alignement_CENTER:
    		x=	((width/2) - ((strlen(text) * tft->getFontXsize())/2)) + x;
    		break;
    	case Alignement_RIGHT:
    		x = (uint8_t)(width-strlen(text)-1);
    		break;
    	default:
    		break;
    	}			
    	tft->print(text,x,y);
    	free(text);
    }
     
     
    RText::~RText(void)
    {
    	Serial.println("unloading text");
    	for (int i = 0; i < _numberOfLine; i++)
    	{
    		Serial.print("unloading text line");Serial.println(i);
    		delete [] _textlines[i];
    		Serial.print("unloaded text line");Serial.println(i);
     
    	}
    	delete [] _textlines;
    	Serial.println("unloaded text");
     
    }
    a vrais dire je doit être une quiche car je comprends pas la difference dans le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	int* set = new int[100];
    	//use set[]
    set[0]=1;
    	delete [] set;
    	system("pause");
     
    	char *_test1 =  new char[3];
    	_test1="123";
    	cout << _test1 << endl;
     
    	delete [] _test1;
    sur la tableau d'entier je n'ai aucun soucis mais sur le tableau char ...
    j'ai une erreur du type _Block_Type_Is_Valid(pHead->nblockUse)
    j'avoue que cela me depasse

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 154
    Billets dans le blog
    4
    Par défaut
    Etant donné que tu mets une valeur statique dans ton char*, qui en plus te fait perdre la zone mémoire allouée juste avant, et qu'il est interdit de faire un delete sur quelque chose non allouée dynamiquement, et tu perds l'info de la zone à désallouer.
    Beaucoup trop d'erreur pour si peu de lignes, il faudrait revoir les bases de l'allocation et utilisation mémoire.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    La différence, c'est que la ligne set[0]=1; modifie les données pointées, alors que _test1="123"; modifie le pointeur lui-même.

    Si tu avais fait strcpy(_test1, "123"); à la place, il n'y aurait pas de différence, sauf que ça fait un dépassement de buffer à cause du caractère nul.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    strcopy, new, etc...

    Si c'est pour faire du C++ ne vaudrait-il pas mieux le renvoyer vers la découverte des conteneurs et de la STL plus généralement ?

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Ça a été fait, mais la réponse qu'on a eu, c'est:
    Citation Envoyé par jeff_! Voir le message
    il faut que vérifie mais je pense pas avoir accès à la std::vector
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Des gens qui auraient accès à new mais pas à std::vector ? Personellement, j'ai du mal à voir de bonnes raisons...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  14. #14
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Des gens qui auraient accès à new mais pas à std::vector ? Personellement, j'ai du mal à voir de bonnes raisons...
    Mauvais prof, C with Class... J'en vois beaucoup ...

    Apres, les appels à Serial dans le code me font dire que c'est du code pour Arduino ou du moins pour de l’embarqué. Et la il faut trouver un portage de la STL.

    Si jai raisons et que c'est pour de l'arduino, ya un portage ici.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  15. #15
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Il me semble que par exemple, il n'y a pas la STL sur Arduino.

    Mais je pencherais plutôt pour une restriction scolaire, style "vous devez apprendre à faire ça vous-même pour savoir comment ça marche sous le capot".

    Edit: Ninja par Davidbrcz
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    C'est pour ça que j'ai dit de *bonnes* raisons....
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  17. #17
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Pour moi, "apprendre à faire ça vous-même pour savoir comment ça marche sous le capot" est une bonne raison. Mais d'après ce que j'ai vu ici, il vaut mieux introduire std::vector en premier pour inculquer les bonnes manières puis faire reproduire les fonctionnalités de base de la classe par l'élève.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    Oui mais les profs devraient se mettre à la page et faire évoluer leurs cours. Avec l'évolution rapide de la norme en marche, est-ce toujours pertinent de descendre aussi loin sous le capot ?

    Le temps de les familiariser à cela, puis de leur faire perdre toutes les mauvaises habitudes qu'ils auront pris pour les former au C++ orienté "standard" pour ensuite leur faire découvrir les nouvelles fonctionnalités du C++11, puis du C++14 puis C++xy etc ....


    Dans 50 ans, aura-t-on le temps/ l'utilité de proposer de refaire strxxx en cours ? Je ne dis pas que c'est pas utile, mais à ce rythme là, les apprenants vont évoluer moins vite que le language ...

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut
    Citation:
    Envoyé par JolyLoic Voir le message
    Des gens qui auraient accès à new mais pas à std::vector ? Personellement, j'ai du mal à voir de bonnes raisons...
    Mauvais prof, C with Class... J'en vois beaucoup ...

    Apres, les appels à Serial dans le code me font dire que c'est du code pour Arduino ou du moins pour de l’embarqué. Et la il faut trouver un portage de la STL.

    Si jai raisons et que c'est pour de l'arduino, ya un portage ici.
    Effectivement c'est bein pour un arduino, j'ai bien vue le portage et malheuresement j'ai n'ai eu le temps de regarder combien de memoire cela me prendrais sur mon arduino et tant donné que je suis deja à 20% d'utilsation du flash et que j'ai pas fait le 1/4 de ce que je veux.


    Oui mais les profs devraient se mettre à la page et faire évoluer leurs cours. Avec l'évolution rapide de la norme en marche, est-ce toujours pertinent de descendre aussi loin sous le capot ?
    Cela me permet de revoir des truc auxquels je n'avais pas compris grand chose en école meme si cela me prend la tête de perdre du temps que se soit l'electronique ou le c/c++

  20. #20
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Pour moi, "apprendre à faire ça vous-même pour savoir comment ça marche sous le capot" est une bonne raison. Mais d'après ce que j'ai vu ici, il vaut mieux introduire std::vector en premier pour inculquer les bonnes manières puis faire reproduire les fonctionnalités de base de la classe par l'élève.
    Je dirais plutôt que cela peut être une bonne raison. Mais pour que ce le soit, il faut un certain nombre de conditions qui ne sont que trop rarement atteintes.

    Autant il est impensable de demander à un étudiant en mécanique de monter l'ensemble des pièces d'un moteur à explosion s'il n'a pas au minimum appris à se servir de clé dynamométriques de jauges d'épaisseurs et autres joyeusetés dont j'ignore tout, autant le fait de savoir "ce qu'il y a sous le capot" de ma SL vient après
    1. avoir appris à trouver le capot
    2. avoir appris à ouvrir le capot
    3. avoir appris à utiliser les outils de la SL.
    Toute la SL est orientée pour, justement, rendre un maximum de choses transparentes pour le développeur en le déchargeant de ce qui risque le plus de le faire foncer dans le mur.

    Il n'y a donc pas de bonne raison pour lui apprendre, justement, ce qui risque de le faire foncer dans le mur avant qu'il n'ai correctement compris comment s'en passer
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. retour tableau d'objets par service web axis jboss
    Par TrollMaster dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 27/11/2005, 21h45
  2. Tableau d'objets
    Par moulefrite dans le forum MFC
    Réponses: 7
    Dernier message: 15/06/2004, 14h14
  3. Sauvegarde / Chargement d'un tableau d'objets
    Par Naruto dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 14h34
  4. [VB6]Tableau d'objet withevents
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/02/2004, 19h44
  5. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo