OVH Cloud OVH Cloud

auto_ptr

17 réponses
Avatar
Jean-Marc Bourguet
Juste pour lever un doute en attendant que j'ai mes références sous la
main.

f(std::auto_ptr<T> x, std::auto_ptr<T> y);

f(new T(...), new T(...));

est bien un risque si T::T(...) peut jeter une exception.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

7 réponses

1 2
Avatar
James Kanze
Gabriel Dos Reis writes:

|> James Kanze writes:

|> | Gabriel Dos Reis writes:

|> | |> Jean-Marc Bourguet writes:

|> | |> | Juste pour lever un doute en attendant que j'ai mes
|> | |> | références sous la main.

|> | |> | f(std::auto_ptr<T> x, std::auto_ptr<T> y);

|> | |> | f(new T(...), new T(...));

|> | |> | est bien un risque si T::T(...) peut jeter une exception.

|> | |> Tout à fait. Je crois que Herb a fait de ça un GotW.
|> | |> James semble l'affectionner pour émettre ses plus
|> | |> véhémentes protestations.

|> | Tu pourrais t'expliquer ? Je suis tout à fait d'accord qu'il
|> | y a une risque, importante. C'est une des raisons pourquoi je
|> | préfèrerais qu'on définisse mieux l'ordre
|> | d'évaluation des expressions ; c'est un piège assez
|> | subtile. (Si Herb en a fait un GotW, c'est parce que Dave
|> | Abraham s'y est tombé dans un de ses postings. Et si des gens
|> | de ce niveau y tombe, pense aux risques pour les autres.)

|> Tu viens juste de donner un autre exemple de ce que je disais.

Mais exemple de quoi ? Ce que j'ai écrit est un
« véhémente protestation » de quoi ?

Je n'aime pas auto_ptr. Ce n'est pas un secret que je préfère
les pointeurs intelligents de Boost, dans tous les cas.

Je n'aime pas que l'ordre d'évaluation soit si libre. Ce n'est pas
de nouveau -- je ne l'aimais déjà pas quand je faisais du C.
Parce qu'il augmente les chances qu'une fonction se comporte d'une
façon lors des tests, et d'une autre dans la version livrée
(avec peut-être l'optimisation). L'exemple ici en est un autre cas,
peut-être la plus critique, mais il ne m'a pas fait changé
d'avis.

Avis qui a toujours été, et qui reste, modéré.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
Gabriel Dos Reis
James Kanze writes:

| Gabriel Dos Reis writes:
|
| |> James Kanze writes:
|
| |> | Gabriel Dos Reis writes:
|
| |> | |> Jean-Marc Bourguet writes:
|
| |> | |> | Juste pour lever un doute en attendant que j'ai mes
| |> | |> | références sous la main.
|
| |> | |> | f(std::auto_ptr<T> x, std::auto_ptr<T> y);
|
| |> | |> | f(new T(...), new T(...));
|
| |> | |> | est bien un risque si T::T(...) peut jeter une exception.
|
| |> | |> Tout à fait. Je crois que Herb a fait de ça un GotW.
| |> | |> James semble l'affectionner pour émettre ses plus
| |> | |> véhémentes protestations.
|
| |> | Tu pourrais t'expliquer ? Je suis tout à fait d'accord qu'il
| |> | y a une risque, importante. C'est une des raisons pourquoi je
| |> | préfèrerais qu'on définisse mieux l'ordre
| |> | d'évaluation des expressions ; c'est un piège assez
| |> | subtile. (Si Herb en a fait un GotW, c'est parce que Dave
| |> | Abraham s'y est tombé dans un de ses postings. Et si des gens
| |> | de ce niveau y tombe, pense aux risques pour les autres.)
|
| |> Tu viens juste de donner un autre exemple de ce que je disais.
|
| Mais exemple de quoi ? Ce que j'ai écrit est un
| « véhémente protestation » de quoi ?

pas « de quoi », mais contre.

| Je n'aime pas auto_ptr. Ce n'est pas un secret que je préfère
| les pointeurs intelligents de Boost, dans tous les cas.
|
| Je n'aime pas que l'ordre d'évaluation soit si libre. Ce n'est pas
| de nouveau -- je ne l'aimais déjà pas quand je faisais du C.
| Parce qu'il augmente les chances qu'une fonction se comporte d'une
| façon lors des tests, et d'une autre dans la version livrée
| (avec peut-être l'optimisation). L'exemple ici en est un autre cas,
| peut-être la plus critique, mais il ne m'a pas fait changé
| d'avis.
|
| Avis qui a toujours été, et qui reste, modéré.

Tout ce que tu viens de dire ce quek tes protestations ne sont pas
nouvelles -- je n'ai jamsis prétendu le contraire.
Quant à « modéré ». Cela reste à voir.

-- Gaby
Avatar
James Kanze
"Michaël Monerau" writes:

|> Jean-Marc Bourguet wrote:
|> > Juste pour lever un doute en attendant que j'ai mes
|> > références sous la main.

|> > f(std::auto_ptr<T> x, std::auto_ptr<T> y);

|> > f(new T(...), new T(...));

|> > est bien un risque si T::T(...) peut jeter une exception.

|> Pourrais-tu expliquer pourquoi il y a un risque ?

Le compilateur a une liberté absolue de réordre une expression
dans la mésure qu'il n'y a pas de points de séquencement qui
interviennent. Et les points de séquencement d'établissent qu'un
ordre partiel.

Dans l'expression en question, on a en fait :

f( auto_ptr< T >( new T( ... ) ), auto_ptr< T >( new T( ... ) ) ) ;

, à cause des conversions implicites. Or, s'il y a bien un point de
séquencement entre chaque expression new et l'appel du constructeur
d'auto_ptr dont elle est le paramètre, il n'y a pas de point de
séquencements entre les expressions qui font les deux
paramètres. Le compilateur est donc libre à générer
quelque chose du genre :

tmp1 = new T( ... )
tmp2 = new T( ... )
tmp3 = auto_ptr< T >( tmp1 ) ;
tmp4 = auto_ptr< T >( tmp2 ) ;
f( tmp3, tmp4 ) ;

(ou les tmp sont en fait soit des régistres, soit des variables sur
la pile). Dans ce cas-là, si le deuxième appel de new T(...)
lève une exception, il y a une fuite de l'objet alloué dans le
premier appel.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
drkm
Gabriel Dos Reis writes:

James Kanze writes:

| Gabriel Dos Reis writes:

| |> Tout à fait. Je crois que Herb a fait de ça un GotW. James
| |> semble l'affectionner pour émettre ses plus véhémentes
| |> protestations.

| Tu pourrais t'expliquer ? Je suis tout à fait d'accord qu'il y a
| une risque, importante. C'est une des raisons pourquoi je
| préfèrerais qu'on définisse mieux l'ordre d'évaluation des
| expressions ; c'est un piège assez subtile. (Si Herb en a fait un
| GotW, c'est parce que Dave Abraham s'y est tombé dans un de ses
| postings. Et si des gens de ce niveau y tombe, pense aux risques
| pour les autres.)


Véhémente protestation.

Tu viens juste de donner un autre exemple de ce que je disais.


Yep.

--drkm

Avatar
James Kanze
drkm writes:

|> Gabriel Dos Reis writes:

|> > James Kanze writes:

|> > | Gabriel Dos Reis writes:

|> > | |> Tout à fait. Je crois que Herb a fait de ça un GotW.
|> > | |> James semble l'affectionner pour émettre ses plus
|> > | |> véhémentes protestations.

|> > | Tu pourrais t'expliquer ? Je suis tout à fait d'accord
|> > | qu'il y a une risque, importante. C'est une des raisons
|> > | pourquoi je préfèrerais qu'on définisse mieux l'ordre
|> > | d'évaluation des expressions ; c'est un piège assez
|> > | subtile. (Si Herb en a fait un GotW, c'est parce que Dave
|> > | Abraham s'y est tombé dans un de ses postings. Et si des
|> > | gens de ce niveau y tombe, pense aux risques pour les autres.)

|> Véhémente protestation.

Donc « je préfèrerais » constitue un « véhémente
protestation » maintenant. Comment alors exprimer un désaccord
de façon modérée ?

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
drkm
James Kanze writes:

drkm writes:

|> Gabriel Dos Reis writes:

|> > James Kanze writes:

|> > | Gabriel Dos Reis writes:

|> > | |> Tout à fait. Je crois que Herb a fait de ça un GotW.
|> > | |> James semble l'affectionner pour émettre ses plus
|> > | |> véhémentes protestations.

|> > | Tu pourrais t'expliquer ? Je suis tout à fait d'accord qu'il
|> > | y a une risque, importante. C'est une des raisons pourquoi
|> > | je préfèrerais qu'on définisse mieux l'ordre d'évaluation
|> > | des expressions ; c'est un piège assez subtile. (Si Herb en
|> > | a fait un GotW, c'est parce que Dave Abraham s'y est tombé
|> > | dans un de ses postings. Et si des gens de ce niveau y
|> > | tombe, pense aux risques pour les autres.)

|> Véhémente protestation.

Donc « je préfèrerais » constitue un « véhémente protestation »
maintenant. Comment alors exprimer un désaccord de façon modérée ?


Oops. Le ridicule de cette position étant pour moi flagrant, je
n'ai pas jugé utile d'y ajoindre un smiley. Je ne pense évidemment
pas que cela soit une « véhémente protestation ».

Le message continuait par

Tu viens juste de donner un autre exemple de ce que je disais.


Yep.

Je voulais juste montrer que cette phrase voulait dire que ce que tu
avais répondu constituait une « véhémente protestation », ce qui est
absurde.

--drkm

Avatar
James Kanze
drkm writes:

|> James Kanze writes:

|> > drkm writes:

|> > |> Gabriel Dos Reis writes:

|> > |> > James Kanze writes:

|> > |> > | Gabriel Dos Reis writes:

|> > |> > | |> Tout à fait. Je crois que Herb a fait de ça un
|> > |> > | |> GotW. James semble l'affectionner pour émettre ses
|> > |> > | |> plus véhémentes protestations.

|> > |> > | Tu pourrais t'expliquer ? Je suis tout à fait
|> > |> > | d'accord qu'il y a une risque, importante. C'est une des
|> > |> > | raisons pourquoi je préfèrerais qu'on définisse
|> > |> > | mieux l'ordre d'évaluation des expressions ; c'est un
|> > |> > | piège assez subtile. (Si Herb en a fait un GotW,
|> > |> > | c'est parce que Dave Abraham s'y est tombé dans un de
|> > |> > | ses postings. Et si des gens de ce niveau y tombe, pense
|> > |> > | aux risques pour les autres.)

|> > |> Véhémente protestation.

|> > Donc « je préfèrerais » constitue un «
|> > véhémente protestation » maintenant. Comment alors
|> > exprimer un désaccord de façon modérée ?

|> Oops. Le ridicule de cette position étant pour moi flagrant,
|> je n'ai pas jugé utile d'y ajoindre un smiley. Je ne pense
|> évidemment pas que cela soit une « véhémente
|> protestation ».

C'était ce que moi, j'avais compris. Mais on n'est pas seul dans ce
fil, et j'ai rémarqué que d'autres ne comprenent pas toujours ce
qui me semblent évident.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
1 2