> Il a ecrit new[] pas new.
(Je dois en avoir ecrit mais je ne me souviens pas d'occasions ou vector< >
ou une classe similaire n'aurait pas ete en fait une meilleure solution).
> Il a ecrit new[] pas new.
(Je dois en avoir ecrit mais je ne me souviens pas d'occasions ou vector< >
ou une classe similaire n'aurait pas ete en fait une meilleure solution).
> Il a ecrit new[] pas new.
(Je dois en avoir ecrit mais je ne me souviens pas d'occasions ou vector< >
ou une classe similaire n'aurait pas ete en fait une meilleure solution).
> Pour confirmer : je pratique le C++ depuis prèsque 20 ans, à
> tous les niveaux (de l'implémentation des vecteur et des chaînes
> à l'époque avant la norme, jusqu'aux applications complètes), et
> je n'ai jamais eu la moindre occasion d'utiliser un new[].
Sauf si on utilise un "allocator" développé par quelqu'un d'autre je
pense qu'on doit avoir au moins un new dans le programme si on
implémente soit même les classes de base :-D
Après je suis d'accord qu'on ne doit pas avoir de "new" si on
utilise la STL et pas plus d'un "new" si on implémente tout
depuis le début.
> Pour confirmer : je pratique le C++ depuis prèsque 20 ans, à
> tous les niveaux (de l'implémentation des vecteur et des chaînes
> à l'époque avant la norme, jusqu'aux applications complètes), et
> je n'ai jamais eu la moindre occasion d'utiliser un new[].
Sauf si on utilise un "allocator" développé par quelqu'un d'autre je
pense qu'on doit avoir au moins un new dans le programme si on
implémente soit même les classes de base :-D
Après je suis d'accord qu'on ne doit pas avoir de "new" si on
utilise la STL et pas plus d'un "new" si on implémente tout
depuis le début.
> Pour confirmer : je pratique le C++ depuis prèsque 20 ans, à
> tous les niveaux (de l'implémentation des vecteur et des chaînes
> à l'époque avant la norme, jusqu'aux applications complètes), et
> je n'ai jamais eu la moindre occasion d'utiliser un new[].
Sauf si on utilise un "allocator" développé par quelqu'un d'autre je
pense qu'on doit avoir au moins un new dans le programme si on
implémente soit même les classes de base :-D
Après je suis d'accord qu'on ne doit pas avoir de "new" si on
utilise la STL et pas plus d'un "new" si on implémente tout
depuis le début.
On 8 août, 04:46, Fabien LE LEZ wrote:
> On Thu, 7 Aug 2008 08:38:00 -0700 (PDT), Sébastien M. :
> >Oui mais malheureusement on doit parfois utiliser des APIs
> >mal faites qui nous obligent à faire ce genre de choses (
> >new[] à la place de vector ).
> Uh ? Dans quel cas ?
Dans cette API, on est sensé hérité d'une classe mère pour
ajouté des comportement.
Il y a des donnée 'protected' de la classe mère qui doivent
être initialisées par les classes filles dont un tableau
d'objet. Cette nouvelle classe doit faire le new sinon la
classe mère n'a pas ce quelle veut ... (évidement on n'a pas
accès au code de la classe mère)
On 8 août, 04:46, Fabien LE LEZ <grams...@gramster.com> wrote:
> On Thu, 7 Aug 2008 08:38:00 -0700 (PDT), Sébastien M. :
> >Oui mais malheureusement on doit parfois utiliser des APIs
> >mal faites qui nous obligent à faire ce genre de choses (
> >new[] à la place de vector ).
> Uh ? Dans quel cas ?
Dans cette API, on est sensé hérité d'une classe mère pour
ajouté des comportement.
Il y a des donnée 'protected' de la classe mère qui doivent
être initialisées par les classes filles dont un tableau
d'objet. Cette nouvelle classe doit faire le new sinon la
classe mère n'a pas ce quelle veut ... (évidement on n'a pas
accès au code de la classe mère)
On 8 août, 04:46, Fabien LE LEZ wrote:
> On Thu, 7 Aug 2008 08:38:00 -0700 (PDT), Sébastien M. :
> >Oui mais malheureusement on doit parfois utiliser des APIs
> >mal faites qui nous obligent à faire ce genre de choses (
> >new[] à la place de vector ).
> Uh ? Dans quel cas ?
Dans cette API, on est sensé hérité d'une classe mère pour
ajouté des comportement.
Il y a des donnée 'protected' de la classe mère qui doivent
être initialisées par les classes filles dont un tableau
d'objet. Cette nouvelle classe doit faire le new sinon la
classe mère n'a pas ce quelle veut ... (évidement on n'a pas
accès au code de la classe mère)
> > Dans cette API, on est sensé hérité d'une classe mère pour
> ajouté des comportement.
> Il y a des donnée 'protected' de la classe mère qui doivent
> être initialisées par les classes filles dont un tableau
> d'objet. Cette nouvelle classe doit faire le new sinon la
> classe mère n'a pas ce quelle veut ... (évidement on n'a pas
> accès au code de la classe mère)
Et &v[0] d'un vector convenablement dimensionné ne ferait-il pas
l'affaire ? (Ou est-ce que la classe mère ferait elle-même le
delete[] ?)
> > Dans cette API, on est sensé hérité d'une classe mère pour
> ajouté des comportement.
> Il y a des donnée 'protected' de la classe mère qui doivent
> être initialisées par les classes filles dont un tableau
> d'objet. Cette nouvelle classe doit faire le new sinon la
> classe mère n'a pas ce quelle veut ... (évidement on n'a pas
> accès au code de la classe mère)
Et &v[0] d'un vector convenablement dimensionné ne ferait-il pas
l'affaire ? (Ou est-ce que la classe mère ferait elle-même le
delete[] ?)
> > Dans cette API, on est sensé hérité d'une classe mère pour
> ajouté des comportement.
> Il y a des donnée 'protected' de la classe mère qui doivent
> être initialisées par les classes filles dont un tableau
> d'objet. Cette nouvelle classe doit faire le new sinon la
> classe mère n'a pas ce quelle veut ... (évidement on n'a pas
> accès au code de la classe mère)
Et &v[0] d'un vector convenablement dimensionné ne ferait-il pas
l'affaire ? (Ou est-ce que la classe mère ferait elle-même le
delete[] ?)
Cela vous semble-t-il normal que ce code compile normalement, sans
même un warning ?
(testé avec gcc 3.4, VS 2003 et VS 2005)
A* tab = new B[16];
Cela vous semble-t-il normal que ce code compile normalement, sans
même un warning ?
(testé avec gcc 3.4, VS 2003 et VS 2005)
A* tab = new B[16];
Cela vous semble-t-il normal que ce code compile normalement, sans
même un warning ?
(testé avec gcc 3.4, VS 2003 et VS 2005)
A* tab = new B[16];
Dans tous les cas, ça ne parle pas en faveur du C++, où chaque
combinaison de mécanisme provoque plus de problème. C'est assez
inadmissible, quand on a l'exemple de LISP
Non. Les concepteurs de C++ sont des dingues qu'il faudrait
enfermer et encamisoler.
Dans tous les cas, ça ne parle pas en faveur du C++, où chaque
combinaison de mécanisme provoque plus de problème. C'est assez
inadmissible, quand on a l'exemple de LISP
Non. Les concepteurs de C++ sont des dingues qu'il faudrait
enfermer et encamisoler.
Dans tous les cas, ça ne parle pas en faveur du C++, où chaque
combinaison de mécanisme provoque plus de problème. C'est assez
inadmissible, quand on a l'exemple de LISP
Non. Les concepteurs de C++ sont des dingues qu'il faudrait
enfermer et encamisoler.
Sébastien M. writes:
> Cela vous semble-t-il normal que ce code compile
> normalement, sans même un warning ?
> (testé avec gcc 3.4, VS 2003 et VS 2005)
> A* tab = new B[16];
Ce qui se passe ici, c'est la confluence de deux mécanismes de
C++ pour donner un résultat imprévu.
La première, c'est l'équivalence tableau-pointeur:
new B[16] retourne un tableau de 16 Bs.
Comme en C/C++, les tableaux sont équivalent aux pointeurs
nous avons en fait un pointeur sur un B, qui est le premier de
16 B alloués.
B* seize_b=new B[16];
La seconde, c'est la possibilité depointer vers une instance
d'une sous-classe avec un pointeur d'une superclasse:
B* b;
A* a=b;
a et b pointent vers la même instance de B qui est aussi une
instance (indirecte) de A.
Quand on mélange les deux,
A* a=new B[16];
on obtient que a pointe vers la première instance de B dans le
tableau de 16 B.
Du fait de l'équivalence pointeur-tableau, on peut s'amuser à
écrire a[i], mais ça n'a aucun sens pour i!=0.
Est ce que ça me semble normal?
Non. Les concepteurs de C++ sont des dingues qu'il faudrait
enfermer et encamisoler. De mon propre chef, je
n'utiliserais jamais C++.
Est ce que ça me semble normal que ce code compile
normalement?
Oui, étant donné les règles de fous donnés dans la
définition de C et C++, rien de plus "normal".
Est ce que ça me semble normal que ce comde compile
normalement, sans même un warning?
Non. Quand on paye pour un compilateur, on voudrait que les
concepteurs du compilateurs nous aident à lutter contre la
folie des auteurs du langage. Un fort warning serait en
effet attendu.
Dans tous les cas, ça ne parle pas en faveur du C++,
Sébastien M. <plou...@yahoo.fr> writes:
> Cela vous semble-t-il normal que ce code compile
> normalement, sans même un warning ?
> (testé avec gcc 3.4, VS 2003 et VS 2005)
> A* tab = new B[16];
Ce qui se passe ici, c'est la confluence de deux mécanismes de
C++ pour donner un résultat imprévu.
La première, c'est l'équivalence tableau-pointeur:
new B[16] retourne un tableau de 16 Bs.
Comme en C/C++, les tableaux sont équivalent aux pointeurs
nous avons en fait un pointeur sur un B, qui est le premier de
16 B alloués.
B* seize_b=new B[16];
La seconde, c'est la possibilité depointer vers une instance
d'une sous-classe avec un pointeur d'une superclasse:
B* b;
A* a=b;
a et b pointent vers la même instance de B qui est aussi une
instance (indirecte) de A.
Quand on mélange les deux,
A* a=new B[16];
on obtient que a pointe vers la première instance de B dans le
tableau de 16 B.
Du fait de l'équivalence pointeur-tableau, on peut s'amuser à
écrire a[i], mais ça n'a aucun sens pour i!=0.
Est ce que ça me semble normal?
Non. Les concepteurs de C++ sont des dingues qu'il faudrait
enfermer et encamisoler. De mon propre chef, je
n'utiliserais jamais C++.
Est ce que ça me semble normal que ce code compile
normalement?
Oui, étant donné les règles de fous donnés dans la
définition de C et C++, rien de plus "normal".
Est ce que ça me semble normal que ce comde compile
normalement, sans même un warning?
Non. Quand on paye pour un compilateur, on voudrait que les
concepteurs du compilateurs nous aident à lutter contre la
folie des auteurs du langage. Un fort warning serait en
effet attendu.
Dans tous les cas, ça ne parle pas en faveur du C++,
Sébastien M. writes:
> Cela vous semble-t-il normal que ce code compile
> normalement, sans même un warning ?
> (testé avec gcc 3.4, VS 2003 et VS 2005)
> A* tab = new B[16];
Ce qui se passe ici, c'est la confluence de deux mécanismes de
C++ pour donner un résultat imprévu.
La première, c'est l'équivalence tableau-pointeur:
new B[16] retourne un tableau de 16 Bs.
Comme en C/C++, les tableaux sont équivalent aux pointeurs
nous avons en fait un pointeur sur un B, qui est le premier de
16 B alloués.
B* seize_b=new B[16];
La seconde, c'est la possibilité depointer vers une instance
d'une sous-classe avec un pointeur d'une superclasse:
B* b;
A* a=b;
a et b pointent vers la même instance de B qui est aussi une
instance (indirecte) de A.
Quand on mélange les deux,
A* a=new B[16];
on obtient que a pointe vers la première instance de B dans le
tableau de 16 B.
Du fait de l'équivalence pointeur-tableau, on peut s'amuser à
écrire a[i], mais ça n'a aucun sens pour i!=0.
Est ce que ça me semble normal?
Non. Les concepteurs de C++ sont des dingues qu'il faudrait
enfermer et encamisoler. De mon propre chef, je
n'utiliserais jamais C++.
Est ce que ça me semble normal que ce code compile
normalement?
Oui, étant donné les règles de fous donnés dans la
définition de C et C++, rien de plus "normal".
Est ce que ça me semble normal que ce comde compile
normalement, sans même un warning?
Non. Quand on paye pour un compilateur, on voudrait que les
concepteurs du compilateurs nous aident à lutter contre la
folie des auteurs du langage. Un fort warning serait en
effet attendu.
Dans tous les cas, ça ne parle pas en faveur du C++,
De l'autre côté, la compatibilité
C a certainement été la raison prédominante pourquoi c'est le
C++ qui s'est imposé, et non le Modula-3 ou l'Eiffel ou que
sais-je. Il y a des motivations pragmatiques, voire pûrement
marketing, dont il faut bien tenir compte.
De l'autre côté, la compatibilité
C a certainement été la raison prédominante pourquoi c'est le
C++ qui s'est imposé, et non le Modula-3 ou l'Eiffel ou que
sais-je. Il y a des motivations pragmatiques, voire pûrement
marketing, dont il faut bien tenir compte.
De l'autre côté, la compatibilité
C a certainement été la raison prédominante pourquoi c'est le
C++ qui s'est imposé, et non le Modula-3 ou l'Eiffel ou que
sais-je. Il y a des motivations pragmatiques, voire pûrement
marketing, dont il faut bien tenir compte.
On Aug 8, 7:57 pm, (Pascal J. Bourguignon)
wrote:Dans tous les cas, ça ne parle pas en faveur du C++,
D'un point de vu formel, non. De l'autre côté, la compatibilité
C a certainement été la raison prédominante pourquoi c'est le
C++ qui s'est imposé, et non le Modula-3 ou l'Eiffel ou que
sais-je. Il y a des motivations pragmatiques, voire pûrement
marketing, dont il faut bien tenir compte.
On Aug 8, 7:57 pm, p...@informatimago.com (Pascal J. Bourguignon)
wrote:
Dans tous les cas, ça ne parle pas en faveur du C++,
D'un point de vu formel, non. De l'autre côté, la compatibilité
C a certainement été la raison prédominante pourquoi c'est le
C++ qui s'est imposé, et non le Modula-3 ou l'Eiffel ou que
sais-je. Il y a des motivations pragmatiques, voire pûrement
marketing, dont il faut bien tenir compte.
On Aug 8, 7:57 pm, (Pascal J. Bourguignon)
wrote:Dans tous les cas, ça ne parle pas en faveur du C++,
D'un point de vu formel, non. De l'autre côté, la compatibilité
C a certainement été la raison prédominante pourquoi c'est le
C++ qui s'est imposé, et non le Modula-3 ou l'Eiffel ou que
sais-je. Il y a des motivations pragmatiques, voire pûrement
marketing, dont il faut bien tenir compte.
On Sat, 9 Aug 2008 02:26:16 -0700 (PDT), James Kanze
:
>De l'autre côté, la compatibilité
>C a certainement été la raison prédominante pourquoi c'est le
>C++ qui s'est imposé, et non le Modula-3 ou l'Eiffel ou que
>sais-je. Il y a des motivations pragmatiques, voire pûrement
>marketing, dont il faut bien tenir compte.
L'élégance d'un langage ne semble pas influer beaucoup sur sa
popularité. Y'a qu'à voir Perl et PHP...
On Sat, 9 Aug 2008 02:26:16 -0700 (PDT), James Kanze
<james.ka...@gmail.com>:
>De l'autre côté, la compatibilité
>C a certainement été la raison prédominante pourquoi c'est le
>C++ qui s'est imposé, et non le Modula-3 ou l'Eiffel ou que
>sais-je. Il y a des motivations pragmatiques, voire pûrement
>marketing, dont il faut bien tenir compte.
L'élégance d'un langage ne semble pas influer beaucoup sur sa
popularité. Y'a qu'à voir Perl et PHP...
On Sat, 9 Aug 2008 02:26:16 -0700 (PDT), James Kanze
:
>De l'autre côté, la compatibilité
>C a certainement été la raison prédominante pourquoi c'est le
>C++ qui s'est imposé, et non le Modula-3 ou l'Eiffel ou que
>sais-je. Il y a des motivations pragmatiques, voire pûrement
>marketing, dont il faut bien tenir compte.
L'élégance d'un langage ne semble pas influer beaucoup sur sa
popularité. Y'a qu'à voir Perl et PHP...