OVH Cloud OVH Cloud

Référence de pointeur

38 réponses
Avatar
Stephane SOPPERA
Bonjour,

Je vous présente ici un petit souci que j'ai eu au travail.

Mettons que nous ayons la situation suivante:
class Base
{
public: virtual ~Base() {}
};

class Enfant1 : public Base
{
};

class Enfant2 : public Base
{
};

J'avais écrit une fonction du type:
void FreeBase ( Base *&p )
{
if ( NULL != p )
{
/* un traitement sur p ici */
....
/* fin du traitement */

delete p;
p = NULL;
}
}

Ainsi j'ai essayé d'utiliser:
Enfant1 *e1 = new Enfant1(...);
Enfant2 *e2 = new Enfant2(...);
...
FreeBase ( e1 );
FreeBase ( e2 );

malheureusement ça ne compile pas. L'erreur est quelque chose comme:
conversion impossible de Enfant1 * vers Base *&.

Est-ce que c'est vraiment impossible?
Suis-je obligé d'utiliser une méthode template dans ce cas là? (ce qui
m'est impossible, les templates m'étant interdits)

Je ne suis pas satisfait par le copier/coller que j'utilise pour l'instant.

Merci d'avance,

--
Stephane SOPPERA
http://perso.wanadoo.fr/stephane.soppera

10 réponses

1 2 3 4
Avatar
Gabriel Dos Reis
writes:

| Fabien LE LEZ wrote in message
| news:...
| > On Thu, 31 Jul 2003 18:47:05 +0200, "Stephane SOPPERA"
| > wrote:
|
| > >Non, je travaille dans une grosse boite qui produit un logiciel
| > >multi-plateformes et qui a décidé de banir les templates.
|
| > Faudrait penser à proposer à celui qui a décidé ça de bannir également
| > l'usage de la lettre "a" dans les noms de variables...
|
| Il est probablem qu'ils ont banni l'utilisation de la lettre 'à'.
|
| On bannit ce qui n'est pas portable dans la pratique.

C'est une règle qui a des exceptions, n'est-ce pas ?
La proposition de Fabien fait partie de ces exceptions là, par définition.

-- Gaby
Avatar
Fabien LE LEZ
On 1 Aug 2003 06:22:10 -0700, wrote:

Il est probablem qu'ils ont banni l'utilisation de la lettre 'à'.


AMHA ils ne se sont même pas posé la question ;-)


--
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
Fabien LE LEZ
On 1 Aug 2003 06:22:10 -0700, wrote:

C'est la solution la plus simple.


Mais c'est AMHA une solution qui soit est très vieille est n'a pas été
remise en cause pour cause d'immobilisme, soit c'est une solution peu
réfléchie.
De toutes façons, forcer une telle règle sans en expliquer les raisons
est une pratique qui montre un certains mépris pour ceux qui doivent
l'appliquer.


--
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
Stephane SOPPERA
On Thu, 31 Jul 2003 19:46:59 +0200, Stephane SOPPERA wrote:

| Non, je travaille dans une grosse boite qui produit un logiciel
| multi-plateformes et qui a décidé de banir les templates.

est-ce une décision technique ? Politique ?


En fait je n'ai pas encore pu le savoir. Et je n'ai pas encore
rencontré de gens qui savaient ;-)


J'ai relu les règles de codages.
Comme dans mon souvenir elles étaient très succintes à propos des
templates. Néanmoins, la seule phrase d'explication dit que leur support
parmis les différents compilateur est alléatoire et que c'est pour celà
qu'ils sont banis.

Donc il s'agirait d'une décision technique, même si elle est peu
argumentée.

--
Stephane SOPPERA
http://perso.wanadoo.fr/stephane.soppera


Avatar
Stephane SOPPERA
D'après son adresse e-mail, il n'est pas depuis très longtemps dans la
vie active,


Je suis en train d'effectuer mon stage de fin d'études ;-)
--
Stephane SOPPERA
http://perso.wanadoo.fr/stephane.soppera

Avatar
Stephane SOPPERA
Parcque je préfère éviter à tout prix les macros


Pourquoi ?


Pour éviter tout problème de conflit de noms et aussi par habitude.

--
Stephane SOPPERA
http://perso.wanadoo.fr/stephane.soppera


Avatar
Stephane SOPPERA
Merci à tous pour vos réponses.

--
Stephane SOPPERA
http://perso.wanadoo.fr/stephane.soppera
Avatar
Christophe Lephay
"Fabien LE LEZ" a écrit dans le message de
news:
De toutes façons, forcer une telle règle sans en expliquer les raisons
est une pratique qui montre un certains mépris pour ceux qui doivent
l'appliquer.


Je n'irais pas jusqu'au mépris. C'est juste un problème de communication,
qui figure en général en seconde position dans les problèmes majeurs des
entreprises (la première étant la trésorerie).

Chris

Avatar
Fabien LE LEZ
On Fri, 1 Aug 2003 18:35:11 +0200, "Christophe Lephay"
wrote:

roblème de communication,
qui figure en général en seconde position dans les problèmes majeurs des
entreprises (la première étant la trésorerie).


Je confirme. Quoique pour une entreprise comme mon employeur (7
employés + un patron), la trésorerie est un problème légèrement devant
le problème de communication ;-/
Le troisième problème (pas très loin derrière) est le manque de prises
pour brancher les PC.


--
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
Fabien LE LEZ
On Fri, 01 Aug 2003 18:21:01 +0200, "Stephane SOPPERA"
wrote:

Parcque je préfère éviter à tout prix les macros


Pourquoi ?


Pour éviter tout problème de conflit de noms


Ce problème est quand même très peu important dans le cas qui nous
occupe :

void FreeBase_appel_par_macro ( Base *p );

#define MACRO_FreeBase(p) { FreeBase_appel_par_macro (p); p= 0; }

1/ Il ne peut pas y avoir de conflit avec autre chose qu'une autre
macro, à cause du préfixe "MACRO_"

2/ Il y a un contrôle de type : si cette macro est appelée avec un
paramètre qui n'est pas un "Base*" (ou un dérivé), ça ne compile pas.

Ça réduit quand même grandement les possibilités de problèmes.

Je dirais que les macros sont souvent une mauvaise solution, tandis
que de la copie de code est quasiment tout le temps la pire des
solutions.

et aussi par habitude.


La pire des raisons. Fais gaffe, si jamais ton entreprise déménage, tu
ne pourras plus y aller à cause de ton habitude d'aller dans l'ancien
bâtiment...

Edicter une règle absolue du type "Il ne faut pas utiliser les
macros", ce n'est plus de la programmation, c'est de la religion.


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



1 2 3 4