Bonjour,
Mon pb doit est le suivant : une classe doit initialisé un de ses membres
avec un pointeur dur elle même :
class B
{
public:
B(class A* pA) : m_pA(pA) {}
private:
class A* m_pA;
}
class A
{
public:
A() : m_B(this) {} // warning 'this' : used in base member
initializer list
private:
const B m_B;
}
Comment eviter le warning (sous VC6) (et d'abord, dois je l'éviter ou
changer de technique ? quel est le risque ?)
Au passage, boost:: utilise cette technique, cf
http://www.boost.org/libs/smart_ptr/sp_techniques.html#weak_without_shared
| Gabriel Dos Reis writes: | | > James Kanze writes: | | > | Gabriel Dos Reis writes: | | > | |> James Kanze writes: | | > | |> | Il ne répond pas à la question si this est visible ou non. | | > | |> simplement parce que « thjis est visible » est quelque chose | > | |> que tu viens d'inventer ? Voir le chapitre 3 sur la notion de | > | |> portée. | | > | D'accord. Je sais que c'est un mot clé, et je sais qu'il n'a donc | > | pas de « portée ». | | > Ah bon. « je sais que c'est un non sens mais je l'écris quand même ». | | Mmm. Je sais que c'est de la démagogie mais je l'écris quand | même...
non sens n'est pas forcdément démagogie.
-- Gaby
drkm <darkman_spam@yahoo.fr> writes:
| Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
|
| > James Kanze <kanze@alex.gabi-soft.fr> writes:
|
| > | Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
|
| > | |> James Kanze <kanze@alex.gabi-soft.fr> writes:
|
| > | |> | Il ne répond pas à la question si this est visible ou non.
|
| > | |> simplement parce que « thjis est visible » est quelque chose
| > | |> que tu viens d'inventer ? Voir le chapitre 3 sur la notion de
| > | |> portée.
|
| > | D'accord. Je sais que c'est un mot clé, et je sais qu'il n'a donc
| > | pas de « portée ».
|
| > Ah bon. « je sais que c'est un non sens mais je l'écris quand même ».
|
| Mmm. Je sais que c'est de la démagogie mais je l'écris quand
| même...
| Gabriel Dos Reis writes: | | > James Kanze writes: | | > | Gabriel Dos Reis writes: | | > | |> James Kanze writes: | | > | |> | Il ne répond pas à la question si this est visible ou non. | | > | |> simplement parce que « thjis est visible » est quelque chose | > | |> que tu viens d'inventer ? Voir le chapitre 3 sur la notion de | > | |> portée. | | > | D'accord. Je sais que c'est un mot clé, et je sais qu'il n'a donc | > | pas de « portée ». | | > Ah bon. « je sais que c'est un non sens mais je l'écris quand même ». | | Mmm. Je sais que c'est de la démagogie mais je l'écris quand | même...
5 Before the lifetime of an object has started but after the storage which the object will occupy has been allocated34) [or, ...] any pointer that refers to the storage location where the object will be [or was] located may be used but only in limited ways. Such a pointer refers to allocated storage (3.7.3.2), and using the pointer as if the pointer were of type void*, is welldefined. Such a pointer may be dereferenced but the resulting lvalue may only be used in limited ways, as described below.
Ceci ne repond pas à la question : « est-ce que une expression this est valide à ce moment ? » Tout ce qu'il dit, c'est que si une expression this est valide, on ne peut s'en servir que d'une façon limitée.
Bon, ma lecture, à tout hasard : "may be used but only in limited ways" . Peut être utilisé mais d'une façon restreinte (celle-ci précisée peu après avec des exemples et contre-exemples, mais je n'ai pas eu le courage de tout citer). Il n'y a pas le mot "valide" (c'est à dire qu' AMHA il faut comprendre : usage valide si les conditions restreintes sont remplies)
Certes. Mais pour que ce s'applique à une expression this, il faut qu'une expression this soit valide à cet endroit. Il n'y a rien dans ce passage qui laisse croire que « this » est une expression valide qui donne l'adresse de l'objet à construire, et c'était bien ça la question.
Ah... c'est donc cela que tu appelais valide, ok. Bon, effectivement, mais si tu peux faire plein de choses dans un constructeur, il faut bien que l'allocation soit faite. Donc, oui, la seule chose qui n'est pas dite *ici*, c'est que this est un pointeur sur une zone allouée correctement quand on arrive dans la liste puis dans le corps du constructeur. Mais ça c'est la définition de this, donnée ailleurs (je suis trop paresseux, ce soir, pour chercher). Une fois que this est, ailleurs, défini comme un pointeur sur une zone bien allouée, alors, chaque fois qu'on parle d'une telle catégorie de pointeurs, il n'y a plus de raison de signaler en permanence this comme un cas particulier. Voilà ma compréhension actuelle des choses à la lumière de ce fil, comme quoi ça sert peut-être de discuter et de lire...
--
Français *==> "Musique renaissance" <==* English midi - facsimiles - ligatures - mensuration http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/ Alain Naigeon - - Strasbourg, France
<kanze@gabi-soft.fr> a écrit dans le message news:
d6652001.0307150051.6e400d9@posting.google.com...
"Alain Naigeon" <anaigeon@free.fr> wrote in message
5 Before the lifetime of an object has started but after the storage
which the object will occupy has been allocated34) [or, ...] any
pointer that refers to the storage location where the object will be
[or was] located may be used but only in limited ways. Such a pointer
refers to allocated storage (3.7.3.2), and using the pointer as if the
pointer were of type void*, is welldefined. Such a pointer may be
dereferenced but the resulting lvalue may only be used in limited
ways, as described below.
Ceci ne repond pas à la question : « est-ce que une expression this est
valide à ce moment ? » Tout ce qu'il dit, c'est que si une expression
this est valide, on ne peut s'en servir que d'une façon limitée.
Bon, ma lecture, à tout hasard : "may be used but only in limited ways" .
Peut être utilisé mais d'une façon restreinte (celle-ci précisée peu après
avec des exemples et contre-exemples, mais je n'ai pas eu le courage
de tout citer). Il n'y a pas le mot "valide" (c'est à dire qu' AMHA il faut
comprendre : usage valide si les conditions restreintes sont remplies)
Certes. Mais pour que ce s'applique à une expression this, il faut
qu'une expression this soit valide à cet endroit. Il n'y a rien dans ce
passage qui laisse croire que « this » est une expression valide qui
donne l'adresse de l'objet à construire, et c'était bien ça la question.
Ah... c'est donc cela que tu appelais valide, ok. Bon, effectivement,
mais si tu peux faire plein de choses dans un constructeur, il faut bien
que l'allocation soit faite. Donc, oui, la seule chose qui n'est pas dite
*ici*, c'est que this est un pointeur sur une zone allouée correctement
quand on arrive dans la liste puis dans le corps du constructeur.
Mais ça c'est la définition de this, donnée ailleurs (je suis trop
paresseux,
ce soir, pour chercher). Une fois que this est, ailleurs, défini comme un
pointeur sur une zone bien allouée, alors, chaque fois qu'on parle d'une
telle catégorie de pointeurs, il n'y a plus de raison de signaler en
permanence
this comme un cas particulier.
Voilà ma compréhension actuelle des choses à la lumière de ce fil, comme
quoi ça sert peut-être de discuter et de lire...
--
Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - anaigeon@free.fr - Strasbourg, France
5 Before the lifetime of an object has started but after the storage which the object will occupy has been allocated34) [or, ...] any pointer that refers to the storage location where the object will be [or was] located may be used but only in limited ways. Such a pointer refers to allocated storage (3.7.3.2), and using the pointer as if the pointer were of type void*, is welldefined. Such a pointer may be dereferenced but the resulting lvalue may only be used in limited ways, as described below.
Ceci ne repond pas à la question : « est-ce que une expression this est valide à ce moment ? » Tout ce qu'il dit, c'est que si une expression this est valide, on ne peut s'en servir que d'une façon limitée.
Bon, ma lecture, à tout hasard : "may be used but only in limited ways" . Peut être utilisé mais d'une façon restreinte (celle-ci précisée peu après avec des exemples et contre-exemples, mais je n'ai pas eu le courage de tout citer). Il n'y a pas le mot "valide" (c'est à dire qu' AMHA il faut comprendre : usage valide si les conditions restreintes sont remplies)
Certes. Mais pour que ce s'applique à une expression this, il faut qu'une expression this soit valide à cet endroit. Il n'y a rien dans ce passage qui laisse croire que « this » est une expression valide qui donne l'adresse de l'objet à construire, et c'était bien ça la question.
Ah... c'est donc cela que tu appelais valide, ok. Bon, effectivement, mais si tu peux faire plein de choses dans un constructeur, il faut bien que l'allocation soit faite. Donc, oui, la seule chose qui n'est pas dite *ici*, c'est que this est un pointeur sur une zone allouée correctement quand on arrive dans la liste puis dans le corps du constructeur. Mais ça c'est la définition de this, donnée ailleurs (je suis trop paresseux, ce soir, pour chercher). Une fois que this est, ailleurs, défini comme un pointeur sur une zone bien allouée, alors, chaque fois qu'on parle d'une telle catégorie de pointeurs, il n'y a plus de raison de signaler en permanence this comme un cas particulier. Voilà ma compréhension actuelle des choses à la lumière de ce fil, comme quoi ça sert peut-être de discuter et de lire...
--
Français *==> "Musique renaissance" <==* English midi - facsimiles - ligatures - mensuration http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/ Alain Naigeon - - Strasbourg, France
Arnaud Meurgues
Gabriel Dos Reis wrote:
| Certes. Je ne parlais pas de James. Ah, tu parlais de toi donc.
Voici le deuxième « c'est c'ui qui dit qui y est » de la semaine. Tu es à la pointe des techniques d'argumentation.
Chapeau bas...
Arnaud
Gabriel Dos Reis wrote:
| Certes. Je ne parlais pas de James.
Ah, tu parlais de toi donc.
Voici le deuxième « c'est c'ui qui dit qui y est » de la semaine. Tu es
à la pointe des techniques d'argumentation.
| Certes. Je ne parlais pas de James. Ah, tu parlais de toi donc.
Voici le deuxième « c'est c'ui qui dit qui y est » de la semaine. Tu es à la pointe des techniques d'argumentation.
Chapeau bas...
Arnaud
kanze
"Alain Naigeon" wrote in message news:<3f148d43$0$16253$...
a écrit dans le message news:
"Alain Naigeon" wrote in message
[...]
Certes. Mais pour que ce s'applique à une expression this, il faut qu'une expression this soit valide à cet endroit. Il n'y a rien dans ce passage qui laisse croire que « this » est une expression valide qui donne l'adresse de l'objet à construire, et c'était bien ça la question.
Ah... c'est donc cela que tu appelais valide, ok.
Je cherche le bon mot. Ce n'est pas évident, avec mon vocabulaire limité. Je trouve que le mot « portée » donnait l'idée le mieux, même si techniquement, ce n'est pas correct. Mais bon, ça n'a pas plus à d'autres.
Bon, effectivement, mais si tu peux faire plein de choses dans un constructeur, il faut bien que l'allocation soit faite. Donc, oui, la seule chose qui n'est pas dite *ici*, c'est que this est un pointeur sur une zone allouée correctement quand on arrive dans la liste puis dans le corps du constructeur.
La seule chose qui n'est pas dit ici, c'est que tu as droit d'utiliser le mot clé « this » dans le contexte en question. Étant donné que le passage parle d'un état lors de l'execution (la mémoire a été allouée, mais le constructeur n'a pas fini), et non d'un contexte -- ce qu'il dit vaut aussi pour des pointeurs dans des fonctions statiques, par exemple, où l'utilisation de « this » n'est pas permis --, c'est normal. Mais du coup, il ne répond pas à la question initiale.
Mais ça c'est la définition de this, donnée ailleurs (je suis trop paresseux, ce soir, pour chercher).
Toute la question initiale tournée justement sur les contextes où le mot clé « this » était permis. Pas ce qu'on pourrait faire avec le pointeur, mais si on « avait » le pointeur.
Une fois que this est, ailleurs, défini comme un pointeur sur une zone bien allouée, alors, chaque fois qu'on parle d'une telle catégorie de pointeurs, il n'y a plus de raison de signaler en permanence this comme un cas particulier.
Certes. Personne le démandait. Le paragraphe en question a quelques problèmes (par exemple, le fait qu'il contradit d'autres paragraphes dans la norme), mais il n'y a aucune raison qu'il parle explicitement de this.
Seulement, s'il ne définit pas où on peut légalement se servir de this, il ne faut pas insister qu'il le fasse.
-- 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
"Alain Naigeon" <anaigeon@free.fr> wrote in message
news:<3f148d43$0$16253$626a54ce@news.free.fr>...
<kanze@gabi-soft.fr> a écrit dans le message news:
d6652001.0307150051.6e400d9@posting.google.com...
"Alain Naigeon" <anaigeon@free.fr> wrote in message
[...]
Certes. Mais pour que ce s'applique à une expression this, il faut
qu'une expression this soit valide à cet endroit. Il n'y a rien dans
ce passage qui laisse croire que « this » est une expression valide
qui donne l'adresse de l'objet à construire, et c'était bien ça la
question.
Ah... c'est donc cela que tu appelais valide, ok.
Je cherche le bon mot. Ce n'est pas évident, avec mon vocabulaire
limité. Je trouve que le mot « portée » donnait l'idée le mieux, même si
techniquement, ce n'est pas correct. Mais bon, ça n'a pas plus à
d'autres.
Bon, effectivement, mais si tu peux faire plein de choses dans un
constructeur, il faut bien que l'allocation soit faite. Donc, oui, la
seule chose qui n'est pas dite *ici*, c'est que this est un pointeur
sur une zone allouée correctement quand on arrive dans la liste puis
dans le corps du constructeur.
La seule chose qui n'est pas dit ici, c'est que tu as droit d'utiliser
le mot clé « this » dans le contexte en question. Étant donné que le
passage parle d'un état lors de l'execution (la mémoire a été allouée,
mais le constructeur n'a pas fini), et non d'un contexte -- ce qu'il dit
vaut aussi pour des pointeurs dans des fonctions statiques, par exemple,
où l'utilisation de « this » n'est pas permis --, c'est normal. Mais du
coup, il ne répond pas à la question initiale.
Mais ça c'est la définition de this, donnée ailleurs (je suis trop
paresseux, ce soir, pour chercher).
Toute la question initiale tournée justement sur les contextes où le mot
clé « this » était permis. Pas ce qu'on pourrait faire avec le pointeur,
mais si on « avait » le pointeur.
Une fois que this est, ailleurs, défini comme un pointeur sur une zone
bien allouée, alors, chaque fois qu'on parle d'une telle catégorie de
pointeurs, il n'y a plus de raison de signaler en permanence this
comme un cas particulier.
Certes. Personne le démandait. Le paragraphe en question a quelques
problèmes (par exemple, le fait qu'il contradit d'autres paragraphes
dans la norme), mais il n'y a aucune raison qu'il parle explicitement de
this.
Seulement, s'il ne définit pas où on peut légalement se servir de this,
il ne faut pas insister qu'il le fasse.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
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
"Alain Naigeon" wrote in message news:<3f148d43$0$16253$...
a écrit dans le message news:
"Alain Naigeon" wrote in message
[...]
Certes. Mais pour que ce s'applique à une expression this, il faut qu'une expression this soit valide à cet endroit. Il n'y a rien dans ce passage qui laisse croire que « this » est une expression valide qui donne l'adresse de l'objet à construire, et c'était bien ça la question.
Ah... c'est donc cela que tu appelais valide, ok.
Je cherche le bon mot. Ce n'est pas évident, avec mon vocabulaire limité. Je trouve que le mot « portée » donnait l'idée le mieux, même si techniquement, ce n'est pas correct. Mais bon, ça n'a pas plus à d'autres.
Bon, effectivement, mais si tu peux faire plein de choses dans un constructeur, il faut bien que l'allocation soit faite. Donc, oui, la seule chose qui n'est pas dite *ici*, c'est que this est un pointeur sur une zone allouée correctement quand on arrive dans la liste puis dans le corps du constructeur.
La seule chose qui n'est pas dit ici, c'est que tu as droit d'utiliser le mot clé « this » dans le contexte en question. Étant donné que le passage parle d'un état lors de l'execution (la mémoire a été allouée, mais le constructeur n'a pas fini), et non d'un contexte -- ce qu'il dit vaut aussi pour des pointeurs dans des fonctions statiques, par exemple, où l'utilisation de « this » n'est pas permis --, c'est normal. Mais du coup, il ne répond pas à la question initiale.
Mais ça c'est la définition de this, donnée ailleurs (je suis trop paresseux, ce soir, pour chercher).
Toute la question initiale tournée justement sur les contextes où le mot clé « this » était permis. Pas ce qu'on pourrait faire avec le pointeur, mais si on « avait » le pointeur.
Une fois que this est, ailleurs, défini comme un pointeur sur une zone bien allouée, alors, chaque fois qu'on parle d'une telle catégorie de pointeurs, il n'y a plus de raison de signaler en permanence this comme un cas particulier.
Certes. Personne le démandait. Le paragraphe en question a quelques problèmes (par exemple, le fait qu'il contradit d'autres paragraphes dans la norme), mais il n'y a aucune raison qu'il parle explicitement de this.
Seulement, s'il ne définit pas où on peut légalement se servir de this, il ne faut pas insister qu'il le fasse.
-- 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
Gabriel Dos Reis
Arnaud Meurgues writes:
| Gabriel Dos Reis wrote: | | > | Certes. Je ne parlais pas de James. | > Ah, tu parlais de toi donc. | | Voici le deuxième « c'est c'ui qui dit qui y est » de la semaine. Tu | es à la pointe des techniques d'argumentation.
| Gabriel Dos Reis wrote:
|
| > | Certes. Je ne parlais pas de James.
| > Ah, tu parlais de toi donc.
|
| Voici le deuxième « c'est c'ui qui dit qui y est » de la semaine. Tu
| es à la pointe des techniques d'argumentation.
| Gabriel Dos Reis wrote: | | > | Certes. Je ne parlais pas de James. | > Ah, tu parlais de toi donc. | | Voici le deuxième « c'est c'ui qui dit qui y est » de la semaine. Tu | es à la pointe des techniques d'argumentation.
Juste dderrière toi.
-- Gaby
Arnaud Meurgues
Gabriel Dos Reis wrote:
| Voici le deuxième « c'est c'ui qui dit qui y est » de la semaine. Tu | es à la pointe des techniques d'argumentation. Juste dderrière toi.
Et de trois.
Arnaud (qui se croirait dans la cours d'école de son fils)
Gabriel Dos Reis wrote:
| Voici le deuxième « c'est c'ui qui dit qui y est » de la semaine. Tu
| es à la pointe des techniques d'argumentation.
Juste dderrière toi.
Et de trois.
Arnaud (qui se croirait dans la cours d'école de son fils)
| Voici le deuxième « c'est c'ui qui dit qui y est » de la semaine. Tu | es à la pointe des techniques d'argumentation. Juste dderrière toi.
Et de trois.
Arnaud (qui se croirait dans la cours d'école de son fils)
drkm
"Alain Naigeon" writes:
Donc, oui, la seule chose qui n'est pas dite *ici*, c'est que this est un pointeur sur une zone allouée correctement quand on arrive dans la liste puis dans le corps du constructeur. Mais ça c'est la définition de this, donnée ailleurs
Bien sûr. Tout le sujet de ce sous-fil était que le fait que « `this´ peut être utilisé dans la liste d'initialisation » n'est pas exprimé dans 3.8/5, mais autre part.
3.8/5 donne les conditions de son utilisation lorsqu'il remplit certaines conditions particulières.
Une fois que this est, ailleurs, défini comme un pointeur sur une zone bien allouée, alors, chaque fois qu'on parle d'une telle catégorie de pointeurs, il n'y a plus de raison de signaler en permanence this comme un cas particulier.
Yep.
--drkm
"Alain Naigeon" <anaigeon@free.fr> writes:
Donc, oui, la seule chose qui n'est pas dite *ici*, c'est que this
est un pointeur sur une zone allouée correctement quand on arrive
dans la liste puis dans le corps du constructeur. Mais ça c'est la
définition de this, donnée ailleurs
Bien sûr. Tout le sujet de ce sous-fil était que le fait que
« `this´ peut être utilisé dans la liste d'initialisation » n'est pas
exprimé dans 3.8/5, mais autre part.
3.8/5 donne les conditions de son utilisation lorsqu'il remplit
certaines conditions particulières.
Une fois que this est, ailleurs, défini comme un pointeur sur une
zone bien allouée, alors, chaque fois qu'on parle d'une telle
catégorie de pointeurs, il n'y a plus de raison de signaler en
permanence this comme un cas particulier.
Donc, oui, la seule chose qui n'est pas dite *ici*, c'est que this est un pointeur sur une zone allouée correctement quand on arrive dans la liste puis dans le corps du constructeur. Mais ça c'est la définition de this, donnée ailleurs
Bien sûr. Tout le sujet de ce sous-fil était que le fait que « `this´ peut être utilisé dans la liste d'initialisation » n'est pas exprimé dans 3.8/5, mais autre part.
3.8/5 donne les conditions de son utilisation lorsqu'il remplit certaines conditions particulières.
Une fois que this est, ailleurs, défini comme un pointeur sur une zone bien allouée, alors, chaque fois qu'on parle d'une telle catégorie de pointeurs, il n'y a plus de raison de signaler en permanence this comme un cas particulier.
Yep.
--drkm
drkm
Arnaud Meurgues writes:
Gabriel Dos Reis wrote:
| Voici le deuxième « c'est c'ui qui dit qui y est » de la | semaine. Tu es à la pointe des techniques d'argumentation.
Juste dderrière toi.
Et de trois.
Arnaud (qui se croirait dans la cours d'école de son fils)