C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

passer son pointeur pendant sa creation?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Bruno Causse
Guest





PostPosted: Sat Apr 29, 2006 10:07 am    Post subject: passer son pointeur pendant sa creation? Reply with quote



bonjour,

comment creer un objet, qui crée d'autre objet en leur passant sa
reference?

du genre

constructeur :

maClass {
objet = new objet(this);
}


merci
--
Bruno Causse
http://perso.wanadoo.fr/othello
Back to top
Bruno Causse
Guest





PostPosted: Sat Apr 29, 2006 11:06 am    Post subject: Re: passer son pointeur pendant sa creation? Reply with quote



Bruno Causse <pasde.hcyrano.spam (AT) free (DOT) fr> wrote:

Quote:
bonjour,

comment creer un objet, qui crée d'autre objet en leur passant sa
reference?

du genre

constructeur :

maClass {
objet = new objet(this);
}


merci

est il possible de passer "this" dans un constructeur?

--
Bruno Causse
http://perso.wanadoo.fr/othello
Back to top
Fabien LE LEZ
Guest





PostPosted: Sat Apr 29, 2006 12:06 pm    Post subject: Re: passer son pointeur pendant sa creation? Reply with quote



On Sat, 29 Apr 2006 13:00:41 +0200, pasde.hcyrano.spam (AT) free (DOT) fr (Bruno
Causse):

Quote:
est il possible de passer "this" dans un constructeur?

Oui.
Back to top
James Kanze
Guest





PostPosted: Sun Apr 30, 2006 11:06 am    Post subject: Re: passer son pointeur pendant sa creation? Reply with quote

Fabien LE LEZ wrote:
Quote:
On Sat, 29 Apr 2006 13:00:41 +0200, pasde.hcyrano.spam (AT) free (DOT) fr
(Bruno Causse):

est il possible de passer "this" dans un constructeur?

Parfois. Une conversion implicite de this à un pointeur à un
type de base a un comportement indéfini :

struct Base {} ;
struct Tool { Tool( Base* owner ) ; } ;
struct Derived : Base
{
Tool myTool ;
Derived() : myTool( this ) {}
} ;

a un comportement indéfini (et ne marche pas dans certains cas,
avec certains compilateurs).

--
James Kanze kanze.james (AT) neuf (DOT) fr
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
Back to top
Fabien LE LEZ
Guest





PostPosted: Sun Apr 30, 2006 12:06 pm    Post subject: Re: passer son pointeur pendant sa creation? Reply with quote

On Sun, 30 Apr 2006 12:38:32 +0200, James Kanze <kanze.james (AT) neuf (DOT) fr>:

Quote:
est il possible de passer "this" dans un constructeur?

Parfois. Une conversion implicite de this à un pointeur à un
type de base a un comportement indéfini :

Tiens ? Quelle en est la cause ?

La partie "Base" est pourtant totalement construite quand on est dans
le corps du constructeur de "Derived", non ?
Back to top
James Kanze
Guest





PostPosted: Sun Apr 30, 2006 9:06 pm    Post subject: Re: passer son pointeur pendant sa creation? Reply with quote

Fabien LE LEZ wrote:
Quote:
On Sun, 30 Apr 2006 12:38:32 +0200, James Kanze <kanze.james (AT) neuf (DOT) fr>:

est il possible de passer "this" dans un constructeur?
Parfois. Une conversion implicite de this à un pointeur à un
type de base a un comportement indéfini :

Tiens ? Quelle en est la cause ?

§3.8/5. Surtout (concernant des pointeurs à l'objet) : « If the
object will be or was of a non-POD class type, the program has
undefined behavior if: [...] the pointer is implicitly converted
to a pointer to a base class type, »

Quote:
La partie "Base" est pourtant totalement construite quand on
est dans le corps du constructeur de "Derived", non ?

Oui, mais si tu pars d'un Derived*, tu ne sais le convertir en
Base* que si la classe a été construite, ou au moins que le vptr
a été bien initialisée. Dans la pratique, ce n'est un problème
que dans le cas d'une base virtuelle -- donnée :

struct B {} ;
struct D : virtual B { D() ; } ;

Dans la liste des initialisateurs de D:Very Happy(), tu ne sais pas
forcément convertir le this en B*.

Enfin, je crois que c'est la motivation derrière la règle (et
c'est bien où ça ne marche pas avec Sun CC). Dans la pratique,
en revanche, il faut que le compilateur puisse le faire dans
certains contextes. Tu peux, par exemple, appeler une fonction
member de la base virtuelle, par exemple :

D:Very Happy() : someMember( memberOfB() ) {}

Ce qui marche avec Sun CC, même si « someMember( this ) » ne
marche pas si le constructeur de someMember prend un B*.

--
James Kanze kanze.james (AT) neuf (DOT) fr
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
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.