Harkonnen a écrit :
Honnètement, je pense que le constructeur de recopie est le moins indispensable de tous les éléments de la forme de Coplien.
|
Pour moi, le moins indispensable est le constructeur par défaut.
Le C++ permetra tôt ou tard de spécifier les paramètres des éléments d'un new[].
Si les trois autres sont appelés "the big three", c'est parce qu'il est rarissime d'avoir besoin de l'un sans les deux autres.
BifaceMcLeOD a écrit a écrit :
Je crois profondément que les cas tordus sont les plus rares. La plupart du temps, les programmeurs ont besoin de faire des choses standard.
|
Presque par définition, dirais-je.
Le truc inhabituel peut être essentiel, crucial à un projet.
C'est pour ça qu'il doit rester possible, et c'est aussi l'avis de Bjarne Stroustrup.
Citation :
je me demande simplement pourquoi, dans un langage aussi courant, il est plus facile d'écrire des choses tordues que d'écrire des choses standard. Ce devrait être le contraire. Ainsi, le programmeur, naturellement, programmerait rigoureusement, et, quand il veut faire un truc tordu, il en a la possibilité -- mais ça lui coûte, par exemple en nombre de lignes de code
|
Tout à fait d'accord, et pas qu'un peu !
Mais 2 problèmes:
- Il n'est pas toujours facile de déterminer ce qu'est 'la chose standard', et celle-ci peut changer avec la mode ou l'évolution des techniques.
- Concrètement, comment on fait ?
2 idées:
1) Pouvoir spécifier (en tête de source) des options d'implicite, du genre "Option Explicit" de VB.
Code :
- option "int size" = 4 ;//int de 4 octets obligatoire
- option "integral promotion" = true ;//int('a') est implicite
- option "integral to floating promotion"= false;//double(1) n'est pas implicte
- option "pointers équivalence" = false;//il faut que tous les pointeurs aient la même représentation mémoire
- option "C++98" = false;//ce source n'est pas compatible avec cette norme
|
Inconvénients:
-Le sens du source est très différent suivant le contexte.
-À trop configurer, chacun créé son propre dialecte du langage.
2) Pouvoir nier ou la commander une spécification automatique.
Code :
- class C{
- C();
- const C& operator=(const C&);
- not C(C); //interdire la création automatique d'un ctor de recopie à partir du ctor par défaut+affectation
- ~C()= auto;//demander un dtor symmétrique du ctor
- };
|
Un tel système risque de tourner à l'usine à gaz, et je doute fort qu'il puisse être cohérent et évolutif.
Mince, ça aurait plus sa place dans [Topic unique] débats sur les langages
---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone