1 2
| sol_actuelle=new solution(tab_sp, tab_contraintes, nb_AP, nb_contr, nb_sp);
new_sol=solution(*sol_actuelle); |
Comment sont déclarés sol_actuelle et new_sol ?
Est-ce des pointeurs ?
Parce que si tu fais :
1 2 3 4 5 6
|
solution* sol_actuelle;
solution new_sol;
sol_actuelle=new solution(tab_sp, tab_contraintes, nb_AP, nb_contr, nb_sp);
new_sol=solution(*sol_actuelle); |
il serait surement plus adapté de faire :
1 2 3 4 5 6
|
solution* sol_actuelle;
solution new_sol;
sol_actuelle=new solution(tab_sp, tab_contraintes, nb_AP, nb_contr, nb_sp);
new_sol=(*sol_actuelle); |
Le constructeur par recopie étant automatiquement appellé lors de l'affectation, il me semble.
Maintenant, vu la signature du constructeur par recopie :
solution::solution(const solution& s)
Il faut que (*sol_actuelle) soit convertible en const solution&, et donc que le pointeur soit declaré comme const.
Essaie de placer un point d'arrêt dans le constructeur par recopie, et au debuggage, regarde si il passe bien par là.
Par contre, si tu fait :
1 2 3 4 5 6
|
solution* sol_actuelle;
solution* new_sol;
sol_actuelle=new solution(tab_sp, tab_contraintes, nb_AP, nb_contr, nb_sp);
new_sol=solution(*sol_actuelle); |
Ca ne compile surement même pas... par contre il est possible de faire :
1 2 3 4 5 6
|
solution* sol_actuelle;
solution* new_sol;
sol_actuelle=new solution(tab_sp, tab_contraintes, nb_AP, nb_contr, nb_sp);
new_sol=sol_actuelle->cloner(); |
En implémentant solution comme une classe clonable (cf. designs patterns) ce qui a plusieurs avantages : clonage d'une classe polymorphique sans connaitre son type exact, allocation dynamique du clone...
En tout cas, travailler un coup avec des pointeurs alloués dynamiquement et un autre avec des objets alloués "statiquement" (déclarés dans une fonction en tant que variable, pas en tant que pointeur) est une mauvaise idée car tu va avoir des problèmes de durée de vie de tes objets (dès que tu sors de la fonction, la variable est détruite, pas le pointeur)
Partager