OVH Cloud OVH Cloud

list d'auto_ptr

21 réponses
Avatar
Gaetan
bonjour
j'ai besoin de faire une liste d'objet qui se d=E9truiront automatiquemen=
t.
Pour cel=E0 en utilisant la STL, j'utilise une list d'auto_ptr.
plus pr=E9cis=E9ment:
class A;
typedef auto_ptr<A> auto_A;
typedef list<auto_ptr> list_A;

ainsi, quand j'ajoute un =E9l=E9ment, il se cr=E9=E9 (le constructeur est=
=20
appel=E9), puis je l'ajoute dans la list (pas de copie, pas de=20
constructeur appell=E9). Puis =E0 la destruction de la list (lors d'un er=
ase=20
ou d'un pop_*), le destructeur est appell=E9.
J'ai l'impression que =E7a marche mais mon programme semble instable de=20
temps en temps j'aimerais savoir si =E7a peu venir de cette m=E9thode=20
(est-elle vraiment propre?). Y a t il un autre moyen?
Avant j'utilisais une list<A> qui marchait mais pour ajouter un =E9l=E9me=
nt=20
il fallait le cr=E9er, puis lors d'un push_*, il en faisait la copie, et =

ensuite pouvait etre d=E9truit automatiquement.
Je me demande si en utilisant les allocators =E7a ne marcherais pas.


Merci

10 réponses

1 2 3
Avatar
Christophe Lephay
"Gabriel Dos Reis" a écrit dans le message de
news:
Pourquoi c'esyt si important ?


tu voulais dire : "Pourquoi c'est-y si important" ?

(le fait que le y soit pas loin du t pourrait tout aussi bien laisser penser
qu'il s'agit d'une simple faute de frappe)

Chris

;)

Avatar
Fabien LE LEZ
On Wed, 20 Aug 2003 19:25:32 +0200, "Christophe Lephay"
wrote:

(le fait que le y soit pas loin du t pourrait tout aussi bien laisser penser
qu'il s'agit d'une simple faute de frappe)


De toutes façons, c'est une faute de frappe, quelle que soit
l'interprétation ;-)


--
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

Avatar
Gabriel Dos Reis
Gaetan writes:

| Gabriel Dos Reis wrote:
|
| > Gaetan writes:
| > | Fabien LE LEZ wrote:
| > | > On Wed, 20 Aug 2003 15:27:41 +0200, Gaetan
| > | > wrote:
| > | >
| > | >>Donc il y a un objet construit pour "rien"...
| > | > Et est-ce problématique ?
| > | >
| > | | oui dans le sens ou il peut y avoir + rapide (et je ne trouve
| > pas celà
| > as-tu mesuré ? Sais-tu ce qu'un new coûte comparé à la copie ?
|
| un ( new + copie de pointeur ) comparé au ( new + copie + destruction ).

Non. C'est "new + constructeur + allocation" (ton utilisation de
pointeur) contre une allocations "optimisée" + constructeur + copie.
Ma question est est-ce que tu as comparé le coût de la copie avec le
new. Et quand je dis comparé, ce n'est pas seulement un calcul
pifométrique, je parle de mesures concrètes.

-- Gaby
Avatar
Christophe Lephay
"Gaetan" a écrit dans le message de
news:3f43ad76$0$16160$
as-tu mesuré ? Sais-tu ce qu'un new coûte comparé à la copie ?


un ( new + copie de pointeur ) comparé au ( new + copie + destruction ).


Pas tout à fait, dans la mesure où quand on permet aux objets d'être copiés
(sémantique de valeur), un intéret important est qu'ils peuvent l'être sur
la pile, ce qui en accélère les création et destructions en évitant d'avoir
à des appels système.

Si tu utilises un profileur pour voir à quoi ton programme passe son temps,
tes cheveux risquent de se dresser sur ta tête (si ce n'est de désespoir, au
moins de surprise) quand tu vas voir le temps qu'il passe dans du code qui
n'est pas le tien, peut-être au point d'oublier le concept même
d'optimisation.

Chris


Avatar
Gabriel Dos Reis
"Christophe Lephay" writes:

| "Gabriel Dos Reis" a écrit dans le message de
| news:
| > Pourquoi c'esyt si important ?
|
| tu voulais dire : "Pourquoi c'est-y si important" ?
|
| (le fait que le y soit pas loin du t pourrait tout aussi bien laisser penser
| qu'il s'agit d'une simple faute de frappe)

C'en est une faute. Il y a eu erreur de transmission.
Avatar
Gaetan

Non. C'est "new + constructeur + allocation" (ton utilisation de
pointeur) contre une allocations "optimisée" + constructeur + copie.
Ma question est est-ce que tu as comparé le coût de la copie avec l e
new. Et quand je dis comparé, ce n'est pas seulement un calcul
pifométrique, je parle de mesures concrètes.


non

-- Gaby


--

~~ Gaetan ~~
http://www.xeberon.net

Avatar
Patrick Mézard
bon bon mais je suis déçut dans un sens que la STL ne permette pas ce
que je disais.


En fait c'est un peu plus profond que ça comme problème :

(A Proposal to Add Move Semantics Support to the C++)
http://std.dkuug.dk/JTC1/SC22/WG21/docs/papers/2002/n1377.htm

Un début de bibliothèque alternative à la STL qui défini (sans support du
langage et c'est là le gros problème) des propriétés "Movable" et
"Transferable" sur les types contenus. Les benchmarks du site montrent un
certrain gain par rapport à la STL dans les cas testés (le contraire eut été
surprenant). Il y a eu une assez longue discussion sur
comp.lang.c++.moderated (chercher <[ANN] NTL "Nonstandard Template Library">
sur google.groups) dont le principales conclusions étaients que :
- Avec l'interface et le look'n'feel de la STL ce serait mieux
- Ca reste un peu du bricolage au niveau du "Movable" parce que c'est assez
dangereux en terme de maintenabilité.
- C'est intéressant quand même parce que certains conteneurs ont des
implémentations originales.
http://www.volny.cz/cxl/overview.html

Donc mieux vaux faire une liste d'objet quitte à faire une recopie au
lieu d'une simple allocation directement.


Oui, ou comme le disait Loïc, utiliser
http://www.boost.org/libs/smart_ptr/shared_ptr.htm

Patrick Mézard

Avatar
Gabriel Dos Reis
"Patrick Mézard" writes:

| >bon bon mais je suis déçut dans un sens que la STL ne permette pas ce
| >que je disais.
|
| En fait c'est un peu plus profond que ça comme problème :

le lien que tu donnes contient des informations intéressantes mais le
rapport entre le sujet en discussion et ls « move semantics » me
semble très ténue, si ce n'est extra-terrestre.

-- Gaby
Avatar
Patrick Mézard
| >bon bon mais je suis déçut dans un sens que la STL ne permette pas ce
| >que je disais.
|
| En fait c'est un peu plus profond que ça comme problème :

le lien que tu donnes contient des informations intéressantes mais le
rapport entre le sujet en discussion et ls « move semantics » me
semble très ténue, si ce n'est extra-terrestre.


Disons que j'ai compris qu'il était déçu par l'impossibilité d'éviter la
création de temporaires (qui est la raison pour laquelle il a voulu utiliser
des pointeurs puis des std::auto_ptr) et non par l'impossibilité d'utiliser
std::auto_ptr dans les conteneurs de la STL (avec laquelle les deux liens
n'ont effectivement aucun rapport, sinon extra-terrestre).

Patrick Mézard

Avatar
Christophe de Vienne
Gabriel Dos Reis wrote:

"Patrick Mézard" writes:

| > | >bon bon mais je suis déçut dans un sens que la STL ne permette pas
| > | >ce que je disais.
| > |
| > | En fait c'est un peu plus profond que ça comme problème :
| >
| > le lien que tu donnes contient des informations intéressantes mais le
| > rapport entre le sujet en discussion et ls « move semantics » me
| > semble très ténue, si ce n'est extra-terrestre.
|
| Disons que j'ai compris qu'il était déçu par l'impossibilité d'éviter la
| création de temporaires

Mais même avec la « move semantics », il lui faudra créer des
temporaires.



Mais à un coup moindre je me trompe ?

--
Christophe de Vienne
Experience is something you don't get until just after you need it.
Oliver's Law.

1 2 3