|
|
|
Le 15 mai 2016, François Guillet a écrit :
> Pour le fun, sur le js vu par le W3C. > Comment supprimer un élément HTML, par exemple une url. > element.delete; ? > Bien sûr que non. Trop simple ! > Il faut demander à son parent de retirer cet enfant ! > element.parentNode.removeChild(element); À vue de nez, je dirais que le père contient un pointeur vers le fils, si le fils s'efface lui-même le père se retrouve avec un pointeur invalide ; et le fils n'a pas le droit de modifier le père. En C++, un objet peut s'effacer lui-même ? N'est-ce pas plutôt le propriétaire du pointeur qui fait « delete ptr; » ? |
|
|
|
Lucas Levrel avait énoncé :
> Le 15 mai 2016, François Guillet a écrit : >> À vue de nez, je dirais que le père contient un pointeur vers le fils, si le > fils s'efface lui-même le père se retrouve avec un pointeur invalide ; et le > fils n'a pas le droit de modifier le père. Il suffirait d'implémenter la méthode "delete" de l'objet "element", méthode qui en détruisant l'élément, retirerait aussi du parent le pointeur invalide. Ce devrait être du ressort du js. C'est d'autant plus exigible que retirer un élément HTML à un parent est fonctionnellement équivalent à le détruire, puisqu'il est rendu inutilisable. > En C++, un objet peut s'effacer > lui-même ? N'est-ce pas plutôt le propriétaire du pointeur qui fait « delete > ptr; » ? En C++, chaque classe a un destructeur par défaut : on n'a pas à s'en préoccuper, sauf cas particuliers où l'on veut fournir la méthode spécifique qui sera appelée. Le destructeur étant une méthode implicite ou explicite de l'objet, utiliser l'opérateur "delete" revient à demander à l'objet de s'auto-détruire. Je pense qu'on pourrait parfaitement inclure "delete" dans les méthodes de l'objet, méthode qui appellerait le destructeur, pour obtenir par un "objet->delete()" la même chose qu'un "delete ptrObjet" (pas essayé). |
|
|
On 18/05/2016 14:01, François Guillet wrote:
> En C++, chaque classe a un destructeur par défaut : on n'a pas à s'en > préoccuper, sauf cas particuliers où l'on veut fournir la méthode > spécifique qui sera appelée. Le destructeur étant une méthode implicite > ou explicite de l'objet, utiliser l'opérateur "delete" revient à > demander à l'objet de s'auto-détruire. Je pense qu'on pourrait > parfaitement inclure "delete" dans les méthodes de l'objet, méthode qui > appellerait le destructeur, pour obtenir par un "objet->delete()" la > même chose qu'un "delete ptrObjet" (pas essayé). ça ne regle en rien le probleme des pointeurs vers cet objet (par ex le parent hierarchique). |
|
|
Le 19/05/2016 07:56, robby a écrit :
> On 18/05/2016 14:01, François Guillet wrote: > parent hierarchique). A moins d'avoir un ramasse-miette, mais je crois pas que ce soit le cas en C++ ? |
|
|
"pehache" a écrit dans le message de groupe de discussion :
dq57i6FmcdbU1... > Le 19/05/2016 07:56, robby a écrit : > A moins d'avoir un ramasse-miette, mais je crois pas que ce soit le cas en > C++ ? Il ne faut pas confondre la destruction de l'objet, qui consiste essentiellement à libérer les ressources qu'il utilise, et libérer sa mémoire associée. Il y a bien deux opérations qu'il faut appeler pour qu'il n'y ait pas de fuite de mémoire. La destruction d'un objet est toujours appelée implicitement, même si le destructeur est explicite. Le destructeur peut à son tour libérer la mémoire des objets vers lesquels l'objet détruit pointe. En java où il y a un ramasse miette, la mémoire d'un objet est libérée quand il n'y a plus de pointeur vers lui, les ressources qu'il utilise sont effacées de la même façon. Les opérations sont également séparées. En C++ il peut arriver qu'un objet devienne inaccessible, c'est le seul problème. -- ~~~~ clmasse on free F-country Liberty, Equality, Profitability. |
|
|
On 19/05/2016 09:16, pehache wrote:
> A moins d'avoir un ramasse-miette, mais je crois pas que ce soit le cas > en C++ ? le principe du ramasse miette, c'est de libéré ce qui n'est plus pointé par personne. Donc ça ne regle tj pas le probleme de dire au pere qu'il n'a plus de fils. |
|
|
robby a pensé très fort :
.... > le principe du ramasse miette, c'est de libéré ce qui n'est plus pointé par > personne. > Donc ça ne regle tj pas le probleme de dire au pere qu'il n'a plus de fils. Ce n'est pas un problème de langage, c'est un problème d'implémentation des objets HTML (c'est ce que je voulais dire quand je disais avec ambiguité que la méthode "element.delete" devrait être traitée par le "js"). Un élément HTML pourrait disposer par défaut de la méthode "delete" qui serait équivalente au palliatif utilisé actuellement. Il suffit que "element.delete" appelle la même méthode d'arrière-plan que "element.parentNode.removeChild(element)". Le problème ici, c'est que le W3C n'a pas de sens pratique. Des cas comme ça, il y en a à la pelle (sans parler des manières différentes pour arriver à un résultat identique, sur des opérations pourtant élémentaires, ce qui signe une redondance inutile des objets et méthodes). |
|
Fuseau horaire GMT +2. Il est actuellement 15h56. | Privacy Policy
|