C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Re: delete( this );
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Alain Migeon
Guest





PostPosted: Wed Aug 06, 2003 8:02 am    Post subject: Re: delete( this ); Reply with quote



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





PostPosted: Wed Aug 06, 2003 9:30 am    Post subject: Re: delete( this ); Reply with quote



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





PostPosted: Wed Aug 06, 2003 10:21 am    Post subject: Re: delete( this ); Reply with quote



On Wed, 06 Aug 2003 09:55:32 +0200, Geoffroy Baud
<geoffroy.baud (AT) wanadoo (DOT) fr> wrote:

Quote:
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.


--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html

Back to top
Martinez Jerome
Guest





PostPosted: Wed Aug 06, 2003 11:31 am    Post subject: Re: delete( this ); Reply with quote

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





PostPosted: Wed Aug 06, 2003 11:43 am    Post subject: Re: delete( this ); Reply with quote

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





PostPosted: Wed Aug 06, 2003 12:01 pm    Post subject: Re: delete( this ); Reply with quote

"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





PostPosted: Wed Aug 06, 2003 12:56 pm    Post subject: Re: delete( this ); Reply with quote

"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





PostPosted: Wed Aug 06, 2003 1:01 pm    Post subject: Re: delete( this ); Reply with quote



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





PostPosted: Wed Aug 06, 2003 2:35 pm    Post subject: Re: delete( this ); Reply with quote


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





PostPosted: Wed Aug 06, 2003 2:47 pm    Post subject: Re: delete( this ); Reply with quote

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





PostPosted: Wed Aug 06, 2003 5:46 pm    Post subject: Re: delete( this ); Reply with quote

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





PostPosted: Wed Aug 06, 2003 6:31 pm    Post subject: Re: delete( this ); Reply with quote

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





PostPosted: Wed Aug 06, 2003 6:47 pm    Post subject: Re: delete( this ); Reply with quote

"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





PostPosted: Thu Aug 07, 2003 6:37 am    Post subject: Re: delete( this ); Reply with quote

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





PostPosted: Thu Aug 07, 2003 8:02 am    Post subject: Re: delete( this ); Reply with quote

[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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.