std::list<> Construction automatique lors de l'insertion

std::list<> Construction automatique lors de l'insertion - C++ - Programmation

Marsh Posté le 01-08-2011 à 21:24:31    

Bonjour,
 
J'ai une liste std::list<Plop>.
 
Plop est une classe assez consequente et je souhaite eviter au maximum les copies.
 
J'aimerai ajouter une instance de Plop dans la liste.
 
Or si je fais  

Code :
  1. Plop instance;
  2. liste.push_back(instance);


Cela fera une copie de instance (ce que je souhaite eviter).
 
Plop possede un constructeur classique Plop() sans argument.
 
Je souhaite creer l'objet a l'interieur de la liste et l'initialiser par la meme occasion.
 
Une solution a laquelle j'ai pense est de faire une std::list<Plop*> a la place, puis

Code :
  1. liste.push_back(new Plop());


 
Mais ca m'embete de me trimballer une liste de vecteurs, c'est relou a manipuler et c'est pas beau visuellement.
 
Connaissez-vous une solution, ou est-ce que la liste de vecteurs est l'unique solution ?
 
Merci d'avance  ;)

Reply

Marsh Posté le 01-08-2011 à 21:24:31   

Reply

Marsh Posté le 01-08-2011 à 21:53:44    

- une std::list de std ou boost::shared_ptr
- un boost::intrusive_list
- un pattern flyweight
 
Apres, pose toi la question de pourquoi Plop est si lourd ... remember GodObject :o

Reply

Marsh Posté le 01-08-2011 à 22:34:13    

Plop n'est pas un godobject, il a juste un buffer statique de 1024 bytes, et c'est moche de le copier ;)
Le boost::shared_ptr m'a l'air fort interessant, mais n'apporte au final qu'un free automatique. Et puis mea culpa, j'ai un peu la flemme de toucher a boost. C'est vraiment si bien que ca ? :p


Message édité par Pascal le nain le 01-08-2011 à 22:34:57
Reply

Marsh Posté le 02-08-2011 à 07:45:07    

non, on le conseille juste pour ce toucher la nouille.
Boost etant l'antichambre du standard, vu que justement le std::shared_ptr est boost::shared_ptr standardisé ... evidemment que c'est naze :o
 
Apres, si on a la flemme, j'y peut rien. T'as ta solution, tu te debrouilles :o

Reply

Marsh Posté le 02-08-2011 à 13:20:50    

Rhoo t'excite pas  :ange:  

Joel F a écrit :


Boost etant l'antichambre du standard, vu que justement le std::shared_ptr est boost::shared_ptr standardisé ... evidemment que c'est naze :o


Tu m'as presque convaincu  ;)
 
Merci !


Message édité par Pascal le nain le 02-08-2011 à 13:20:59
Reply

Marsh Posté le 02-08-2011 à 17:49:57    

spa pour rien que je mets des :o

Reply

Marsh Posté le 04-08-2011 à 17:59:12    

premature optimisation is the root of all evil. Tu es sur que le remplissage de ta liste pose un réel problème dans ton application ?
 
en tout cas, des structures qui avoisinnent 1Ko c'est pas la mort non plus. Ca devrait pas être long.


---------------
last.fm
Reply

Marsh Posté le 04-08-2011 à 19:33:40    

je soupconne des passages par valeurs inopines au lieu de passage apr reference ailleurs dans le code.

Reply

Marsh Posté le 04-08-2011 à 21:14:11    

A moins qu'il soit possible de faire une liste de reference, j'ai pas trop le choix.
Et c'est pas de l'optimisation prematuree. C'est une liste de sessions sur un daemon pour simuler une liaison permanente alors que le client se connecte par le web (donc asynchrone).
Je veux garder les sessions en memoire pour eviter de charger/decharger les sessions entre la ram et le disque.


Message édité par Pascal le nain le 04-08-2011 à 21:15:07
Reply

Marsh Posté le 05-08-2011 à 09:21:24    

sauf que 1k c'est ridiculement rien. T'a des benchs pour montrer que ca pose probleme ?

Reply

Marsh Posté le 05-08-2011 à 09:21:24   

Reply

Marsh Posté le 09-08-2011 à 14:52:06    

Pas de bench, mais j'aimerai éviter de faire des opérations inutiles.
Ce n'est pas de l'optimisation prématurée, puisque ce que je désire faire est la ligne droite vers l'objectif, mais malheureusement impossible par la syntaxe du C++ actuel.
Je vais devoir faire quelques zig zags :p

Reply

Marsh Posté le 09-08-2011 à 16:46:00    

pas de benchs, pas d'optim. Point. Ecris d'abord un code simple et lisible et maintenable, checks tes specs et avise apres.

Reply

Marsh Posté le 09-08-2011 à 17:38:17    

Pascal le nain a écrit :

Pas de bench, mais j'aimerai éviter de faire des opérations inutiles.
Ce n'est pas de l'optimisation prématurée, puisque ce que je désire faire est la ligne droite vers l'objectif, mais malheureusement impossible par la syntaxe du C++ actuel.
Je vais devoir faire quelques zig zags :p


 
mais faut arrêter de cracher sur le langage quand, d'une part, tu n'as même pas mesure s'il y avait problème et d'autre part, tu n'es pas en mesure d'implémenter les alternatives que tu proposes toi-même (la liste de références dont tu parles, c'est pas compliqué de la faire en liste de pointeurs, et tu peux même te faire un conteneur perso qui masque que ce sont des pointeurs si ca te chante) ...
Le C++ est justement tout à fait adapté pour traiter les problématiques de performances sur ce genre de sujet (accès aux données).


---------------
last.fm
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed