 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Alain Migeon Guest
|
Posted: Wed Aug 06, 2003 8:02 am Post subject: Re: delete( this ); |
|
|
In article <3f30b47b$0$15129$626a54ce (AT) news (DOT) free.fr>,
[email]geoffroy.baud (AT) wanadoo (DOT) fr[/email] says...
| Quote: | Bonjour,
j'aurais voulus savoir si
cela se faisait de detruire un
objet dans une de ses fonctions membre
avec un delete( this ).
au nivaux de la norme ...
de la logique ou autre
merci
bonne journée
|
Au niveau de la logique, ça revient à scier la branche sur laquelle on
est assis...
--
__________________________________________
Alain Migeon
Please reverse dk and rovsing for replying
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Wed Aug 06, 2003 9:30 am Post subject: Re: delete( this ); |
|
|
Alain Migeon <migeon.alain (AT) dk (DOT) rovsing> writes:
| Quote: | In article <3f30b47b$0$15129$626a54ce (AT) news (DOT) free.fr>,
[email]geoffroy.baud (AT) wanadoo (DOT) fr[/email] says...
Bonjour,
j'aurais voulus savoir si
cela se faisait de detruire un
objet dans une de ses fonctions membre
avec un delete( this ).
au nivaux de la norme ...
|
au niveau de la norme, c'est permsi tant que tu sais ce que tu fais.
| Quote: | de la logique ou autre
|
au niveau de la logique, c'est une autre histoire : quelle logique ?
la tienne ou la mienne ? :-)
| Quote: | merci
bonne journée
Au niveau de la logique, ça revient à scier la branche sur laquelle on
est assis...
|
le suicide est puni par la loi ?
-- Gaby
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
|
| Back to top |
|
 |
Martinez Jerome Guest
|
Posted: Wed Aug 06, 2003 11:31 am Post subject: Re: delete( this ); |
|
|
Fabien LE LEZ wrote:
| Quote: | A priori, on ne le fait pas (même si c'est autorisé par la norme),
tout simplement parce que ça n'a pas vraiment d'utilité pratique.
|
Imaginons que je fasse une classe qui créé un thread et se gere toute
seule apres.
La classe fait se qu'elle a a faire, et se "suicide" (delete this)
L'appelant de cette classe n'a donc pas a savoir quand ca se termine, en
fait il fait un new et laisse la classe faire son taf dans son thread.
Mauvaise conception?
|
|
| Back to top |
|
 |
Chewee Guest
|
Posted: Wed Aug 06, 2003 11:43 am Post subject: Re: delete( this ); |
|
|
Martinez Jerome wrote:
| Quote: | Fabien LE LEZ wrote:
A priori, on ne le fait pas (même si c'est autorisé par la norme),
tout simplement parce que ça n'a pas vraiment d'utilité pratique.
Imaginons que je fasse une classe qui créé un thread et se gere toute
seule apres.
La classe fait se qu'elle a a faire, et se "suicide" (delete this)
L'appelant de cette classe n'a donc pas a savoir quand ca se termine,
en fait il fait un new et laisse la classe faire son taf dans son
thread.
Mauvaise conception?
|
à ta place, j'aurais fais un singleton...
Une classe TOTO qui contiendrais une instance de TOTO en donnée membre
statique.
En deletant cette instance, tu as ce que tu veux faire je pense...
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Wed Aug 06, 2003 12:01 pm Post subject: Re: delete( this ); |
|
|
"Quentin L." <danteNOSPAM (AT) nerim (DOT) net> writes:
| Quote: | "Gabriel Dos Reis" <gdr (AT) integrable-solutions (DOT) net> a écrit dans le message de
news:m3llu7t9ny.fsf (AT) uniton (DOT) integrable-solutions.net...
Alain Migeon <migeon.alain (AT) dk (DOT) rovsing> writes:
| Au niveau de la logique, ça revient à scier la branche sur laquelle on
| est assis...
le suicide est puni par la loi ?
non par contre il me semble que l'aide au suicide l'est. Donc on devrait
poursuivre les auteurs de la norme pour non assistance pour personnes en
danger.
|
Ainsi que les vendeurs de couteaux.
-- Gaby
|
|
| Back to top |
|
 |
Alain Naigeon Guest
|
Posted: Wed Aug 06, 2003 12:56 pm Post subject: Re: delete( this ); |
|
|
"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message news:
[email]qjl1jvsl1v1sn76nlinemtjmi874c7qjr4 (AT) 4ax (DOT) com[/email]...
| Quote: | On Wed, 06 Aug 2003 09:55:32 +0200, Geoffroy Baud
[email]geoffroy.baud (AT) wanadoo (DOT) fr[/email]> wrote:
j'aurais voulus savoir si
cela se faisait de detruire un
objet dans une de ses fonctions membre
avec un delete( this ).
A priori, on ne le fait pas (même si c'est autorisé par la norme),
tout simplement parce que ça n'a pas vraiment d'utilité pratique.
|
J'ai déjà vu ça, suite à quoi j'ai osé l'utiliser.
Dans certains cas, pourquoi pas...
--
Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - [email]anaigeon (AT) free (DOT) fr[/email] - Strasbourg, France
|
|
| Back to top |
|
 |
Vivien Gallinaro Guest
|
Posted: Wed Aug 06, 2003 1:01 pm Post subject: Re: delete( this ); |
|
|
Chewee wrote:
| Quote: | Martinez Jerome wrote:
Imaginons que je fasse une classe qui créé un thread et se gere toute
seule apres.
La classe fait se qu'elle a a faire, et se "suicide" (delete this)
L'appelant de cette classe n'a donc pas a savoir quand ca se termine,
en fait il fait un new et laisse la classe faire son taf dans son
thread.
Mauvaise conception?
à ta place, j'aurais fais un singleton...
Une classe TOTO qui contiendrais une instance de TOTO en donnée membre
statique.
En deletant cette instance, tu as ce que tu veux faire je pense...
|
Sauf s'il veut plusieurs threads, non ?
Je suis pas fort en design patterns, mais je pense que ce dont il parle
ressemble plus à un pointeur intelligent : un objet qui fait le new d'un
membre "pointeur de thread", avec le delete correspondant dans le
destructeur (ou n'importe où ailleurs, en fait ça ne regarde que lui ;)
Pitit exemple :
class thread_ptr
{
thread *ptr;
// autres membres private
public:
thread_ptr () {
ptr = new thread ();
// ...
}
~thread_ptr () {
delete ptr;
}
// ...
};
Et plus intéressant, l'utilisation :
void lancer_thread ()
{
thread_ptr t;
// à cet endroit, ton deuxième thread vis sa vie
} // <-- arrivé là, il est killé par ~thread_ptr()
Je ne garanti pas, par contre, que le fait que la gestion se fasse au
niveau du scope soit ce qu'il y a de mieux, mais en regardant ça vite
fait, je ne vois pas trop pourquoi ça poserait problème...
Gourgouilloult du Clapotis
(Et désolé d'avoir disparu comme ça, mais j'ai déménagé, et je ne
pensais pas y perdre autant de temps.)
|
|
| Back to top |
|
 |
Jean-Michel Bechet Guest
|
Posted: Wed Aug 06, 2003 2:35 pm Post subject: Re: delete( this ); |
|
|
| Quote: | Bonjour,
j'aurais voulus savoir si
cela se faisait de detruire un
objet dans une de ses fonctions membre
avec un delete( this ).
au nivaux de la norme ...
de la logique ou autre
|
Cette manière de procéder me semble logique lorsqu'on a un objet qui doit
"s'auto détruire".
Par exemple, fermeture d'une fenêtre, fin d'un thread, fin d'un programme,
fin d'une connection, ...
J'ai déjà procédé de la sorte et cela ne m'a pas posé de problème
particulier ...
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Wed Aug 06, 2003 2:47 pm Post subject: Re: delete( this ); |
|
|
Fabien LE LEZ <gramster (AT) gramster (DOT) com> wrote
| Quote: | On Wed, 06 Aug 2003 09:55:32 +0200, Geoffroy Baud
[email]geoffroy.baud (AT) wanadoo (DOT) fr[/email]> wrote:
j'aurais voulus savoir si cela se faisait de detruire un objet dans
une de ses fonctions membre avec un delete( this ).
A priori, on ne le fait pas (même si c'est autorisé par la norme),
tout simplement parce que ça n'a pas vraiment d'utilité pratique.
|
A priori, on le fait quand ça du sens. Si le comportement de la classe,
en réponse à un stimilus externe, doit être de cesser d'exister, la
façon la plus claire à l'implémenter est avec « delete this ».
Je ne peux pas parler pour tout le monde, mais je sais que moi, je m'en
sers, et que le même vaut pour les auteurs de Boost. J'imagine qu'on
n'est pas les seuls.
--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
|
|
| Back to top |
|
 |
Arnaud Debaene Guest
|
Posted: Wed Aug 06, 2003 5:46 pm Post subject: Re: delete( this ); |
|
|
Vivien Gallinaro wrote:
| Quote: | void lancer_thread ()
{
thread_ptr t;
// à cet endroit, ton deuxième thread vis sa vie
} // <-- arrivé là, il est killé par ~thread_ptr()
|
Sauf que son but, c'est que son objet thread soit détruit quand il a fini
de faire son boulot, pas quand un pointeur qui n'a rien à voir avec
l'avancement interne du thread est détruit. Par définition la durée de vie
d'un thread est totalement asynchrone par rapport à ce qui se passe dans le
thread qui le lance.
Je pense que l'erreur de conception est plutôt de penser que l'obet thread
doit-être détruit quand le thread lui-même se termine. La durée de vie de
l'objet thread doit être gérée par les lois habituelles de durée de vie d'un
objet, et il doit proposer une méthode bool IsTerminated(). Ca permet de
faire un certain nombre de choses, comme par exemple attendre que le thread
se termine avant de contiuer son travail par exemple.
Il y a d'autres cas (un objet Fenetre par exemple) où cet idiome me semble
parfaitement justifié et je ne vois pas pourquoi on devrait l'interdire.
Bien enetendu, cet idiome est dangereux si on alloue un objet sur la pile,
mais il ne devrait servir que pour des objets dont la durée de vie est par
définition indépendante du déroulement linéaire du code (une fenêtre est un
bon exemple).
Arnaud
|
|
| Back to top |
|
 |
Patrick Mézard Guest
|
Posted: Wed Aug 06, 2003 6:31 pm Post subject: Re: delete( this ); |
|
|
| Quote: | Je ne peux pas parler pour tout le monde, mais je sais que moi, je m'en
sers, et que le même vaut pour les auteurs de Boost. J'imagine qu'on
n'est pas les seuls.
|
Juste pour illustrer ton propos :
http://www.boost.org/libs/smart_ptr/sp_techniques.html#from_this
Patrick Mézard
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Wed Aug 06, 2003 6:47 pm Post subject: Re: delete( this ); |
|
|
"Arnaud Debaene" <adebaene (AT) club-internet (DOT) fr> writes:
| Quote: | La durée de vie de
l'objet thread doit être gérée par les lois habituelles de durée de vie d'un
objet,
|
Qui sont ?
| Quote: | et il doit proposer une méthode bool IsTerminated().
|
sauf s'il n'y a personne pour évaluer IsTerminated(), ou plutôt, la
personne la mieux placée pour l'évaluer est le thread lui même :-)
-- Gaby
|
|
| Back to top |
|
 |
Rotschi Matthieu Guest
|
Posted: Thu Aug 07, 2003 6:37 am Post subject: Re: delete( this ); |
|
|
Arnaud Debaene wrote:
| Quote: |
Bien enetendu, cet idiome est dangereux si on alloue un objet sur la pile,
|
Il suffit de mettre le destructeur en private pour réduire le probleme
non ?
--
Matthieu
|
|
| Back to top |
|
 |
Frederic Py Guest
|
Posted: Thu Aug 07, 2003 8:02 am Post subject: Re: delete( this ); |
|
|
[email]kanze (AT) gabi-soft (DOT) fr[/email] said the following, On 08/07/03 09:54:
| Quote: | Frederic Py <fpy.nospam (AT) laas (DOT) rf> wrote in message
news:<bgr29m$1jp$1 (AT) kane (DOT) laas.fr>...
Alain Naigeon said the following, On 08/06/03 14:56:
"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message news:
[email]qjl1jvsl1v1sn76nlinemtjmi874c7qjr4 (AT) 4ax (DOT) com[/email]...
On Wed, 06 Aug 2003 09:55:32 +0200, Geoffroy Baud
[email]geoffroy.baud (AT) wanadoo (DOT) fr[/email]> wrote:
j'aurais voulus savoir si cela se faisait de detruire un objet dans
une de ses fonctions membre avec un delete( this ).
[...]
Je l'ai deja utilise dans la structure contenant l'objet reference
pour un smart pointer faisant du reference counting. Mais ca reste
tres specifique a mon avis et on peut toujours faire autrement ...
donc autant eviter cette forme tordue :)
On peut toujours faire autrement, c'est sur. Par exemple :
template< typename T
void
deleteMe( T* ptr )
{
delete ptr ;
}
Alors, si c'est l'objet même qui sait que le moment est venu, qu'est-ce
qui est plus tordu ? Qu'il fait « delete this », ou qu'il informe
quelqu'un d'autre uniquement pour que l'autre fasse le delete ?
|
Ce qui me gene toujours dans le delete this est le fait qu'on soit
encore dans une methode de l'instance alors que l'instance n'existe plus
a la fin du delete. Mais bon ce ne sont peut etre que des considerations
personnelles qui n'interfeerent que sur ma maniere de coder.
--
Frederic Py
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|