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 

delete d'un tableau d'objets
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Jean-Noël Mégoz
Guest





PostPosted: Sun May 16, 2004 11:37 pm    Post subject: delete d'un tableau d'objets Reply with quote



Salut !

Petite question :
Imaginons une classe C dont un des membres T est un tableau d'objets,
instances d'une autre classe.
Le destructeur :
C::~C()
{
delete[] T;
}
est-il suffisant pour que les destructeurs des objets contenus dans T soient
appelés eux aussi ?
Ou faut-il que je prévoie une boucle pour détruire chacun de ces objets,
avant le "delete[] T;" ?

J.No.


Back to top
drkm
Guest





PostPosted: Mon May 17, 2004 12:05 am    Post subject: Re: delete d'un tableau d'objets Reply with quote



"Jean-Noël Mégoz" <nospam_jnmegoz (AT) infonie (DOT) fr> writes:

Quote:
Petite question :
Imaginons une classe C dont un des membres T est un tableau d'objets,
instances d'une autre classe.
Le destructeur :
C::~C()
{
delete[] T;
}
est-il suffisant pour que les destructeurs des objets contenus dans T soient
appelés eux aussi ?
Ou faut-il que je prévoie une boucle pour détruire chacun de ces objets,
avant le "delete[] T;" ?

class AClass
{
public:
AClass()
 : myObjects( /* ... */ )
, myPointers( /* ... */ )
{
// ...
}
~AClass()
{
delete[] myObjects ;
for ( int i = 0 ; i < /* ... */ ; ++ i ) {
delete myPointers[ i ] ;
}
delete[] myPointers ;
}
private:
AType * myObjects ;
AType * * myPointers ;
} ;

--drkm

Back to top
Horst Kraemer
Guest





PostPosted: Mon May 17, 2004 8:37 am    Post subject: Re: delete d'un tableau d'objets Reply with quote



On Mon, 17 May 2004 01:37:06 +0200, "Jean-Noël Mégoz"
<nospam_jnmegoz (AT) infonie (DOT) fr> wrote:

Quote:
Salut !

Petite question :
Imaginons une classe C dont un des membres T est un tableau d'objets,
instances d'une autre classe.
Le destructeur :
C::~C()
{
delete[] T;
}
est-il suffisant pour que les destructeurs des objets contenus dans T soient
appelés eux aussi ?

Ce n'est ni suffisant ni insuffisant. C'est illégal. delete ne peut
être appliqué qu'à un pointeur. Un tableau n'est pas un pointeur.

Le destructeur de la classe X (la classe des éléments du tableau) est
appelé automatiquement pour tous les éléments du tableau T par le
destructeur ~C. Donc il n'y rien a faire dans ~C par rapport au
tableau T.

--
Horst


Back to top
Alexandre
Guest





PostPosted: Sat Jun 05, 2004 8:59 am    Post subject: Re: delete d'un tableau d'objets Reply with quote

Quote:
Ce n'est ni suffisant ni insuffisant. C'est illégal. delete ne peut
être appliqué qu'à un pointeur. Un tableau n'est pas un pointeur.

je pense qu'il utilise T comme un tableau, mais qu'il est défini comme
pointeur, qq chose du genre
TRUC *T = new TRUC[taille];

et donc le delete[] suffit bien à appeler le destructeur ~TRUC pour chaque
élément du tableau.




Back to top
Alexandre
Guest





PostPosted: Sat Jun 05, 2004 9:00 am    Post subject: Re: delete d'un tableau d'objets Reply with quote

bonjour,

Quote:
Petite question :
Imaginons une classe C

une classe C++ je suppose,

Quote:
dont un des membres T est un tableau d'objets,

un pointeur je suppose, utilisé comme un tableau dynamique.

Quote:
instances d'une autre classe.
Le destructeur :
C::~C()
{
delete[] T;
}
est-il suffisant pour que les destructeurs des objets contenus dans T
soient
appelés eux aussi ?

oui.

Quote:
Ou faut-il que je prévoie une boucle pour détruire chacun de ces objets,
avant le "delete[] T;" ?

non.

Et puis, pour ne pas t'embeter avec tout ça, définis T comme un vector et
non un pointeur/tableau dynamique.



Back to top
Jean-Noël Mégoz
Guest





PostPosted: Sat Jun 05, 2004 9:34 am    Post subject: Re: delete d'un tableau d'objets Reply with quote


"Alexandre" <alex.g (AT) netcourrier (DOT) com> a écrit dans le message de
news:40c18b8a$0$7698$636a15ce (AT) news (DOT) free.fr...
Quote:
bonjour,

Petite question :
Imaginons une classe C

une classe C++ je suppose,


Ici, C était censé être le nom de la classe, mais ça prêtait à confusion, en
effet. Désolé.

Quote:
Et puis, pour ne pas t'embeter avec tout ça, définis T comme un vector et
non un pointeur/tableau dynamique.

Bon conseil sans doute, mais je n'ai pas encore mis le nez dans la STL.




Back to top
Fabien LE LEZ
Guest





PostPosted: Sat Jun 05, 2004 3:53 pm    Post subject: Re: delete d'un tableau d'objets Reply with quote

On Sat, 5 Jun 2004 11:34:15 +0200, "Jean-Noël Mégoz"
<nospam_jnmegoz (AT) infonie (DOT) fr> wrote:

Quote:
Et puis, pour ne pas t'embeter avec tout ça, définis T comme un vector et
non un pointeur/tableau dynamique.

Bon conseil sans doute, mais je n'ai pas encore mis le nez dans la STL.

Ben il vaut mieux t'y mettre tout de suite, c'est nettement plus
simple que les histoires d'allocation dynamique.

--
Wink
FLL, Epagneul Breton

Back to top
Alain Naigeon
Guest





PostPosted: Sat Jun 05, 2004 8:43 pm    Post subject: Re: delete d'un tableau d'objets Reply with quote

"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message news:
[email]m2r3c05pbu0cep4d0gudgtnau51stt0cn2 (AT) 4ax (DOT) com[/email]...
Quote:
On Sat, 5 Jun 2004 11:34:15 +0200, "Jean-Noël Mégoz"
[email]nospam_jnmegoz (AT) infonie (DOT) fr[/email]> wrote:

Et puis, pour ne pas t'embeter avec tout ça, définis T comme un vector
et
non un pointeur/tableau dynamique.

Bon conseil sans doute, mais je n'ai pas encore mis le nez dans la STL.

Ben il vaut mieux t'y mettre tout de suite, c'est nettement plus
simple que les histoires d'allocation dynamique.

Euh... question de goût...

--

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
kanze@gabi-soft.fr
Guest





PostPosted: Mon Jun 07, 2004 8:09 am    Post subject: Re: delete d'un tableau d'objets Reply with quote

"Alain Naigeon" <anaigeon (AT) free (DOT) fr> wrote

Quote:
"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message news:
[email]m2r3c05pbu0cep4d0gudgtnau51stt0cn2 (AT) 4ax (DOT) com[/email]...
On Sat, 5 Jun 2004 11:34:15 +0200, "Jean-Noël Mégoz"
[email]nospam_jnmegoz (AT) infonie (DOT) fr[/email]> wrote:

Et puis, pour ne pas t'embeter avec tout ça, définis T comme un
vector et non un pointeur/tableau dynamique.

Bon conseil sans doute, mais je n'ai pas encore mis le nez dans la
STL.

Ben il vaut mieux t'y mettre tout de suite, c'est nettement plus
simple que les histoires d'allocation dynamique.

Euh... question de goût...

Euh... Oui et non.

Si on parle de toute la STL, avec les algorithmes, les binder, etc.,
oui. C'est une question de goût. Moi-même, elle ne m'emballe pas
particulièrement non plus.

En revanche, si on ne parle que de std::vector, non. Je ne crois pas que
c'est réelement une question de goût -- l'utilisation de std::vector<T>
*est* nettement plus simple, et indiscutablement préférable, à new T[].
Ne serait-ce que du fait que je n'ai pas besoin de m'occuper de delete,
y compris en cas d'exception.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
Matthieu Moy
Guest





PostPosted: Mon Jun 07, 2004 8:14 am    Post subject: Re: delete d'un tableau d'objets Reply with quote

[email]kanze (AT) gabi-soft (DOT) fr[/email] writes:

Quote:
En revanche, si on ne parle que de std::vector, non. Je ne crois pas que
c'est réelement une question de goût -- l'utilisation de std::vector *est* nettement plus simple, et indiscutablement préférable, à new T[].
Ne serait-ce que du fait que je n'ai pas besoin de m'occuper de delete,
y compris en cas d'exception.

Faut faire gaffe quand même au « piège à c** » genre :

http://www-verimag.imag.fr/~moy/c_collection/vector.cpp

Mais sinon, c'est drôlement pratique !

--
Matthieu

Back to top
Alain Naigeon
Guest





PostPosted: Mon Jun 07, 2004 9:09 am    Post subject: Re: delete d'un tableau d'objets Reply with quote

<kanze (AT) gabi-soft (DOT) fr> a écrit dans le message news:
[email]d6652001.0406070009.165a7212 (AT) posting (DOT) google.com[/email]...
Quote:
"Alain Naigeon" <anaigeon (AT) free (DOT) fr> wrote in message
news:<40c232d5$0$21568$626a14ce (AT) news (DOT) free.fr>...
"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message news:
[email]m2r3c05pbu0cep4d0gudgtnau51stt0cn2 (AT) 4ax (DOT) com[/email]...
On Sat, 5 Jun 2004 11:34:15 +0200, "Jean-Noël Mégoz"
[email]nospam_jnmegoz (AT) infonie (DOT) fr[/email]> wrote:

Et puis, pour ne pas t'embeter avec tout ça, définis T comme un
vector et non un pointeur/tableau dynamique.

Bon conseil sans doute, mais je n'ai pas encore mis le nez dans la
STL.

Ben il vaut mieux t'y mettre tout de suite, c'est nettement plus
simple que les histoires d'allocation dynamique.

Euh... question de goût...

Euh... Oui et non.

Si on parle de toute la STL, avec les algorithmes, les binder, etc.,
oui. C'est une question de goût. Moi-même, elle ne m'emballe pas
particulièrement non plus.

En revanche, si on ne parle que de std::vector, non. Je ne crois pas que
c'est réelement une question de goût -- l'utilisation de std::vector<T
*est* nettement plus simple, et indiscutablement préférable, à new T[].

Je suis d'accord que std:vector std:list std:map sont pratiques et d'usage
plutôt simple. Mais AMHA il y a un problème d'accès à la STL ; franchement,
pour un débutant, s'y plonger et discerner dans tout ça ce qui utile et
simple dans un premier temps, c'est pas évident ! Dans certains cas j'ai
préféré me refaire moi-même certains types (nombres avec limites, par
exemple) plutôt que d'essayer de comprendre tous les détails de certaines
"usines à gaz" de la STL. Et puis je trouve qu'elle est plus tournée vers
l'implémentation que vers l'abstraction, mais ceci est un autre débat
(encore que... on trouve plus simple ce qui correspond plus à ses goûts
personnels, évidemment).


Quote:
Ne serait-ce que du fait que je n'ai pas besoin de m'occuper de delete,
y compris en cas d'exception.


Là je suis un peu embarassé, évidemment, vu que tu donnes le seul
exemple où l'usage de delete n'est pas évident (pour moi) Wink
Hormis ce cas, je ne vois guère de problème avec new et delete.
L'essentiel est d'adopter une politique claire quant à la "propriété"
des objets alloués. Mais certaines questions récentes ici même
ont montré, il me semble, que cette question se pose *aussi*
quand on utilise la STL, alors...

Et puis, surtout : crois-tu sincèrement que quelqu'un qui n'a pas une
expérience *concrète* avec new et delete sera à l'aise dans sa
lecture des fichiers de la STL ?? La pédagogie ne peut être
dogmatique, il faut accepter les différences d'approche chez les
élèves (dont moi), et pour ma part mon esprit se refuse à utiliser
un outil sans en connaître le fonctionnement. Je suis fait ainsi,
c'est peut-être un défaut, mais le dépassement de cet état ne
peut passer que par son acception provisoire (belle phrase, hein ?).

--

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
Fabien LE LEZ
Guest





PostPosted: Mon Jun 07, 2004 12:35 pm    Post subject: Re: delete d'un tableau d'objets Reply with quote

On Mon, 7 Jun 2004 11:09:22 +0200, "Alain Naigeon" <anaigeon (AT) free (DOT) fr>
wrote:

Quote:
Mais AMHA il y a un problème d'accès à la STL ; franchement,
pour un débutant, s'y plonger et discerner dans tout ça ce qui utile et
simple dans un premier temps, c'est pas évident !

C'est le rôle d'un bon cours/livre de C++, qui aborde std::string et
std::vector au tout début, et le reste au fur et à mesure.

--
Wink
FLL, Epagneul Breton

Back to top
Fabien LE LEZ
Guest





PostPosted: Mon Jun 07, 2004 12:38 pm    Post subject: Re: delete d'un tableau d'objets Reply with quote

On Mon, 7 Jun 2004 11:09:22 +0200, "Alain Naigeon" <anaigeon (AT) free (DOT) fr>
wrote:

Quote:
et pour ma part mon esprit se refuse à utiliser
un outil sans en connaître le fonctionnement.

Hé bé ! S'il faut avoir de très bonnes notions d'électronique pour
étudier en détail le fonctionnement du processeur, de la carte mère,
etc., et de très bonnes notions d'informatique pour comprendre le
fonctionnement de l'OS et du compilateur, le tout avant même de
commencer l'apprentissage du C++, on n'est pas sorti...


Back to top
Fabien LE LEZ
Guest





PostPosted: Mon Jun 07, 2004 12:40 pm    Post subject: Re: delete d'un tableau d'objets Reply with quote

On Mon, 7 Jun 2004 11:09:22 +0200, "Alain Naigeon" <anaigeon (AT) free (DOT) fr>
wrote:

Quote:
Ne serait-ce que du fait que je n'ai pas besoin de m'occuper de delete,
y compris en cas d'exception.


Là je suis un peu embarassé, évidemment, vu que tu donnes le seul
exemple où l'usage de delete n'est pas évident (pour moi) Wink
Hormis ce cas

Euh... tu as vu beaucoup de cas, toi, où le code entre un "new" et le
"delete" correspondant est garanti "nothrow" ?

--
Wink
FLL, Epagneul Breton

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Jun 07, 2004 3:50 pm    Post subject: Re: delete d'un tableau d'objets Reply with quote

"Alain Naigeon" <anaigeon (AT) free (DOT) fr> wrote

Quote:
kanze (AT) gabi-soft (DOT) fr> a écrit dans le message news:
[email]d6652001.0406070009.165a7212 (AT) posting (DOT) google.com[/email]...
"Alain Naigeon" <anaigeon (AT) free (DOT) fr> wrote in message
news:<40c232d5$0$21568$626a14ce (AT) news (DOT) free.fr>...
"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message news:
[email]m2r3c05pbu0cep4d0gudgtnau51stt0cn2 (AT) 4ax (DOT) com[/email]...
On Sat, 5 Jun 2004 11:34:15 +0200, "Jean-Noël Mégoz"
[email]nospam_jnmegoz (AT) infonie (DOT) fr[/email]> wrote:

Et puis, pour ne pas t'embeter avec tout ça, définis T comme un
vector et non un pointeur/tableau dynamique.

Bon conseil sans doute, mais je n'ai pas encore mis le nez dans
la STL.

Ben il vaut mieux t'y mettre tout de suite, c'est nettement plus
simple que les histoires d'allocation dynamique.

Euh... question de goût...

Euh... Oui et non.

Si on parle de toute la STL, avec les algorithmes, les binder, etc.,
oui. C'est une question de goût. Moi-même, elle ne m'emballe pas
particulièrement non plus.

En revanche, si on ne parle que de std::vector, non. Je ne crois pas
que c'est réelement une question de goût -- l'utilisation de
std::vector<T> *est* nettement plus simple, et indiscutablement
préférable, à new T[].

Je suis d'accord que std:vector std:list std:map sont pratiques et
d'usage plutôt simple. Mais AMHA il y a un problème d'accès à la STL ;
franchement, pour un débutant, s'y plonger et discerner dans tout ça
ce qui utile et simple dans un premier temps, c'est pas évident !

Je suis tout à fait d'accord. Le but de mon posting, c'était en fait de
suggérer qu'ils parlaient de deux choses différentes. Ça commence,
« utilise std::vector<T>, plutôt que T[] » auquel on a répondu : « mais
la STL, je ne le connais pas », suivi de « mais il faut ». Or, AMHA, le
premier conseil est bon, indépendamment de la STL, en tant qu'ensemble,
et même si std::vector fait bel et bien partie de la STL. Il ne faut pas
rejeter la partie simple parce qu'on a peur de la partie compliquée.

Quote:
Dans certains cas j'ai préféré me refaire moi-même certains types
(nombres avec limites, par exemple) plutôt que d'essayer de comprendre
tous les détails de certaines "usines à gaz" de la STL. Et puis je
trouve qu'elle est plus tournée vers l'implémentation que vers
l'abstraction, mais ceci est un autre débat (encore que... on trouve
plus simple ce qui correspond plus à ses goûts personnels,
évidemment).

Je suis tout à fait d'accord avec toi, là.

Quote:
Ne serait-ce que du fait que je n'ai pas besoin de m'occuper de
delete, y compris en cas d'exception.

Là je suis un peu embarassé, évidemment, vu que tu donnes le seul
exemple où l'usage de delete n'est pas évident (pour moi) Wink Hormis
ce cas, je ne vois guère de problème avec new et delete. L'essentiel
est d'adopter une politique claire quant à la "propriété" des objets
alloués. Mais certaines questions récentes ici même ont montré, il me
semble, que cette question se pose *aussi* quand on utilise la STL,
alors...

Et puis, surtout : crois-tu sincèrement que quelqu'un qui n'a pas une
expérience *concrète* avec new et delete sera à l'aise dans sa lecture
des fichiers de la STL ??

Qui lit les fichiers de la STL ? Moi, je ne les régarde jamais. Pour
commencer, il suffit d'utiliser std::vector comme un tableau classique,
c-à-d :

std::vector< int > vi( 100 ) ;
for ( size_t i = 0 ; i < vi.size() ; ++ i ) {
vi[ i ] = i ;
}

etc. Assez rapidement, je crois, on peut y ajouter push_back -- c'est
drôlement commode. (Évidemment, il faut choisir : ou push_back, ou des
itérateurs qui marchent. Mais au moins d'être fou de la STL, on se passe
bien des itérateurs sur des tableaux.)

Quote:
La pédagogie ne peut être dogmatique, il faut accepter les différences
d'approche chez les élèves (dont moi), et pour ma part mon esprit se
refuse à utiliser un outil sans en connaître le fonctionnement. Je
suis fait ainsi, c'est peut-être un défaut, mais le dépassement de cet
état ne peut passer que par son acception provisoire (belle phrase,
hein ?).

Si je prenais cette attitude, je ne pourrais pas me servir des
templates, parce que je ne sais pas trop comment le compilateur s'en
débrouille. Et si tu es capable de comprendre comment le compilateur
implémente les templates, je t'assure, std::vector ne te posera pas de
problème.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

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  Next
Page 1 of 2

 
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.