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

8 réponses

1 2 3 4
Avatar
Fabien LE LEZ
On Fri, 01 Aug 2003 18:16:30 +0200, "Stephane SOPPERA"
wrote:

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.


De quand datent ces règles de codage ?


--
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
Loïc Joly
Fabien LE LEZ wrote:
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.


J'aurais plutôt mis les trous noir à [stylos/tournevis] (suivant
l'environnement) juste avant le manque de prise.

--
Loïc


Avatar
Fabien LE LEZ
On Sat, 02 Aug 2003 02:27:10 +0200, Loïc Joly
wrote:

J'aurais plutôt mis les trous noir à [stylos/tournevis] (suivant
l'environnement) juste avant le manque de prise.


Effectivement, en ce moment je serais plutôt d'accord avec toi. Mais
il y a encore un an, le problème récurrent du manque de prises était
largement plus important.


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


De quand datent ces règles de codage ?


Ca je ne le sais pas du tout.

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



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


Certes.

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.


D'ailleurs je ne banis pas totalement les macros (cf le poste que je vais
bientôt écrire là dessus).

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




Avatar
kanze
Fabien LE LEZ wrote in message
news:...
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.


Ne sachant pas la contexte, je ne peux pas dire. J'avoue qu'une
utilisation modérée des templates (pas de la programmation générique) me
semble assez portable aujourd'hui, mais je n'exclus pas qu'ils puissent
avoir leur raisons. (Mozilla interdit encore des templates, par
exemple. Et c'est une décision refléchie, qui a été remise en cause et
réconduite.)

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.


Ça, évidemment, est vrai pour n'importe quelle règle. En général, les
règles ne marchent que quand les programmeurs sont d'accord sur leur
nécessité. C'est le rôle du management de les vendre, et non de les
imposer.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


Avatar
kanze
"Stephane SOPPERA" wrote in message
news:<bgbh1s$26m$...

Pourquoi cette fonction est inutile? Je ne vois pas bien...


Disons que dans le cas général, elle est inutile parce qu'elle donne un
faux sentiment de sécurité, sans s'adresser réelement au problème.

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


Si tu utilises du copier/coller, je comprends ta frustration. Mais
pour l'instant, je ne vois pas l'intérêt de la fonction ; je dirais
alors de la virer carrément, pour encore plus de simplicité.


Par exemple, j'ai dans la class implémentant la méthode FreeBase trois
pointeurs vers des classes Enfant1 et deux vers des classes Enfant2.
Ces classes sont des ressources (des textures en fait) qui peuvent
être non assignées (NULL), ou remplacées au cours de l'éxécution
indépendament les unes des autres. J'ai donc un code de libération de
resource qui va être le même pour chaque resource (que ce soit une
classe Enfant1 ou Enfant2 car la libération de la ressource n'utilise
que de méthode de leur parent commun). Or je voulais éviter d'écrire 5
fonctions différentes pour libérer chacune des resources une à une
alors que le code était absolument identique pour chacune de ces
fonctions (seul le nom du pointeur changeant).


C-à-d qu'en fait chaque accès passe à travers le même pointeur, avec un
test préalable pour null. Et que les libérations ne se limitent pas au
destructeur. C'est un cas (par particulièrement fréquent) où
effectivement, une remise du pointeur à null peut être justifié.

Alors, je rétire mon « inutile ».

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16



Avatar
kanze
Fabien LE LEZ wrote in message
news:...
On 4 Aug 2003 06:49:08 -0700, wrote:

Mozilla interdit encore des templates, par exemple. Et c'est une
décision refléchie, qui a été remise en cause et réconduite.


Quelles en sont les raisons ?


Voir http://www.mozilla.org/hacking/portable-cpp.html. En gros, c'est à
cause de la portabilité. Et ils ont une exception.

Note que c'est un cas extrème. D'une part, ils ont besoin que le code
marche vraiment partout, et de l'autre, ils n'ont pas un contrôl direct
sur leur programmeurs.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


1 2 3 4