New avec struct ?

Le
No_Name
Bonjour,

Une question que je me pose :

Dans un programme en C++, puis-je utiliser une sctructure (définie par
struct) avec new/delete, ou faut-il impérativement passer par
malloc/free ?

Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Marc Bourguet
Le #18883831
No_Name
Dans un programme en C++, puis-je utiliser une sctructure (définie par
struct) avec new/delete,



Oui. Definir une classe avec struct n'est pas tres different que de la
definir avec class. Si je ne m'abuse pas, la seule difference, c'est
l'accessibilite par defaut (private pour class, public pour struct).

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
No_Name
Le #18883821
Jean-Marc Bourguet avait prétendu :
No_Name
Dans un programme en C++, puis-je utiliser une sctructure (définie par
struct) avec new/delete,



Oui. Definir une classe avec struct n'est pas tres different que de la
definir avec class. Si je ne m'abuse pas, la seule difference, c'est
l'accessibilite par defaut (private pour class, public pour struct).

A+



Merci.
pjb
Le #18883811
No_Name
Bonjour,

Une question que je me pose :

Dans un programme en C++, puis-je utiliser une sctructure (définie par
struct) avec new/delete, ou faut-il impérativement passer par
malloc/free ?



En C++, il n'y a pas de différence fondamentale entre class et struct.
(PCQJS, la différence porte seulement sur la visibilité par défaut des membres).

Les deux déclarations suivantes sont équivalentes :

struct Example {
int counter;
Example(int c):counter(c){};
};

class Example {
public:
int counter;
Example(int c):counter(c){};
};

on peut bien sur faire:

Example* e=new Example(42);
std::cout<<(e->counter)<<std::endl;
delete e;

dans les deux cas.

--
__Pascal Bourguignon__
James Kanze
Le #18890441
On Mar 12, 11:19 am, No_Name
Une question que je me pose :



Dans un programme en C++, puis-je utiliser une sctructure
(définie par struct) avec new/delete, ou faut-il
impérativement passer par malloc/free ?



Comme d'autres ont déjà dit, il n'y a pas vraiment des
« struct » en C++ ; que tu te sers du mot clé struct ou du
mot clé class, tu définis une classe. Mais aussi : les
operateurs new et delete marche pour tout type, sans exception.
Tu peux bien faire « new int », par exemple. En général, il
n'y a pas de raison d'utiliser malloc/free dans du C++ pûr.

--
James Kanze (GABI Software) email:
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
Fabien LE LEZ
Le #18893941
On Fri, 13 Mar 2009 01:48:21 -0700 (PDT), James Kanze

que tu te sers du mot clé struct ou du
mot clé class, tu définis une classe.



Par convention, j'ai tendance à utiliser "struct" quand il n'y a que
des membres publics. Mais ce n'est effectivement qu'une convention
personnelle, pas un truc du langage lui-même.
Alexandre BACQUART
Le #18895741
Fabien LE LEZ wrote:
On Fri, 13 Mar 2009 01:48:21 -0700 (PDT), James Kanze

que tu te sers du mot clé struct ou du
mot clé class, tu définis une classe.



Par convention, j'ai tendance à utiliser "struct" quand il n'y a que
des membres publics. Mais ce n'est effectivement qu'une convention
personnelle, pas un truc du langage lui-même.



C'est amusant finalement ce petit détail de C++ : deux mots clés pour
faire sensiblement la même chose (alors qu'en revanche, certains mots
clé ont plusieurs usages, comme 'static'). En fait, j'ai toujours été
curieux des raisons pour lesquelles 'class' a été introduit, alors que
rien ne semble le justifier dans la mécanique du langage duquel C++
hérite déjà. Ce n'est quand-même pas simplement pour introduire une
bonne habitude consistant à protéger tous les membres par défaut ? Cela
m'interpelle...

Typiquement, à la longue, j'ai pris l'habitude de n'utiliser struct que
pour des structures bas-niveau, comme une façon d'auto-documenter qu'il
s'agit plutôt d'un agrégat. Je l'utilise également souvent pour les
functors.


--
Alex
James Kanze
Le #18897951
On Mar 13, 6:53 pm, Fabien LE LEZ
On Fri, 13 Mar 2009 01:48:21 -0700 (PDT), James Kanze



>que tu te sers du mot clé struct ou du
>mot clé class, tu définis une classe.



Par convention, j'ai tendance à utiliser "struct" quand il n'y
a que des membres publics. Mais ce n'est effectivement qu'une
convention personnelle, pas un truc du langage lui-même.



Tout à fait. Des variants de cette règle d'écriture sont assez
répandus -- chez moi, par exemple, j'utilise struct quand les
membres données sont public, class autrement (et je ne suis pas
toujours cohérent quand il n'y a pas de membres données, que des
fonctions ou des typedef publiques). Mais c'est toujours une
règle d'écriture, non une règle du langage.

Note aussi que selon la norme, le mot clé union définit aussi
une classe. Mais à l'encontre de struct et de class, c'est une
classe bien différente des autres.

--
James Kanze (GABI Software) email:
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
Fabien LE LEZ
Le #18899331
On Fri, 13 Mar 2009 22:52:17 +0100, Alexandre BACQUART

Ce n'est quand-même pas simplement pour introduire une
bonne habitude consistant à protéger tous les membres par défaut ?



Il est fort possible que ce soit une des raisons. N'oublie pas qu'au
départ, le C++ s'adressait à des programmeurs C.

Peut-être aussi que "class" sonnait plus "OO".
Fabien LE LEZ
Le #18899531
On Sat, 14 Mar 2009 02:29:22 -0700 (PDT), James Kanze

Note aussi que selon la norme, le mot clé union définit aussi
une classe.



Yep. J'ai tendance à tout le temps l'oublier, celui-là. Je ne suis pas
sûr de l'avoir déjà utilisé.
James Kanze
Le #18905241
On Mar 14, 2:04 pm, Fabien LE LEZ
On Sat, 14 Mar 2009 02:29:22 -0700 (PDT), James Kanze



>Note aussi que selon la norme, le mot clé union définit aussi
>une classe.



Yep. J'ai tendance à tout le temps l'oublier, celui-là. Je ne
suis pas sûr de l'avoir déjà utilisé.



C'est vrai qu'elles servent beaucoup moins en C++ qu'en C. Mais
j'ai toujours :
union MaximumAlignment
{
long l ;
long long ll ;
double d ;
long double ld ;
char* pc ;
MaximumAlignment* ps ;
void (* pf)() ;
} ;
avec ici et là, des :

union
{
unsigned char buffer[ sizeof( T ) ];
MaximumAlignment dummyForAlignment ;
} ;

Et parfois quand je me sers de lex/flex.

--
James Kanze (GABI Software) email:
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
Publicité
Poster une réponse
Anonyme