Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

allocation dynamique ou objet automatiques

6 réponses
Avatar
Laurent DELEPINE
Bonjour,


Une classe a t'elle un moyen de savoir si son instance est un objet
automatique ou un objet alloué dynamiquement au moyen d'un new.



A+

LD

6 réponses

Avatar
Frederic Py
Laurent DELEPINE wrote:
Bonjour,


Une classe a t'elle un moyen de savoir si son instance est un objet
automatique ou un objet alloué dynamiquement au moyen d'un new.




Par defaut non mais on peut tout a fait surcharger l'operateur new afin
qu'il fixe un flag interne a la classe indiquant que celle-ci a ete
allouee dynamiquement.

Cette methode ne fonctionneraque si l'utilisateur de cette classe evite
de mettre des ::new partout.


--
Frederic Py

Avatar
James Kanze
Frederic Py writes:

|> Laurent DELEPINE wrote:

|> > Une classe a t'elle un moyen de savoir si son instance est un
|> > objet automatique ou un objet alloué dynamiquement au moyen
|> > d'un new.

|> Par defaut non mais on peut tout a fait surcharger l'operateur new
|> afin qu'il fixe un flag interne a la classe indiquant que celle-ci
|> a ete allouee dynamiquement.

Ce qui ne marche que partiellement. Qu'est-ce qui se passe si une
autre classe contient la classe comme membre.

|> Cette methode ne fonctionneraque si l'utilisateur de cette classe
|> evite de mettre des ::new partout.

Et évite d'utiliser la classe comme membre d'autres classes, et
évite de l'utiliser dans un tableau, etc.

En fait, comme Jean-Marc, je commencerais par démander pourquoi il
veut le savoir. En général, le fait d'avoir besoin de ce genre
d'information est significatif d'une erreur de conception quelque
part.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
Laurent DELEPINE
James Kanze wrote:
Frederic Py writes:

|> Laurent DELEPINE wrote:

|> > Une classe a t'elle un moyen de savoir si son instance est un
|> > objet automatique ou un objet alloué dynamiquement au moyen
|> > d'un new.

|> Par defaut non mais on peut tout a fait surcharger l'operateur new
|> afin qu'il fixe un flag interne a la classe indiquant que celle-ci
|> a ete allouee dynamiquement.

Ce qui ne marche que partiellement. Qu'est-ce qui se passe si une
autre classe contient la classe comme membre.


Et c'est justement quand la classe est membre d'une autre classe que le
probleme se pose :-).

Par ailleurs, j'utilise une version surchargée de new pour detecter les
erreurs d'allocation memoire.

|> Cette methode ne fonctionneraque si l'utilisateur de cette classe
|> evite de mettre des ::new partout.

Et évite d'utiliser la classe comme membre d'autres classes, et
évite de l'utiliser dans un tableau, etc.


Pas de bol.

En fait, comme Jean-Marc, je commencerais par démander pourquoi il
veut le savoir. En général, le fait d'avoir besoin de ce genre
d'information est significatif d'une erreur de conception quelque
part.


En fait j'ai interfacé une librairie de widgets ecrite en C avec une
arborescence de classe C++. La librairie de widget se charge d'effacer
les widgets, mais naturellement pas les instances C++ associée. Je me
charge donc de cet effacement.J'explore le widget parent contenant les
autres widgets et detruit les instances C++ associées. Mais quand
l'instance est membre d'une classe, il ne faut plus l'effacer, la
destruction de la classe proprietaire le fera automatiquement.




A+

LD

Avatar
kanze
Laurent DELEPINE wrote in message
news:<3f243ee6$0$21108$...

[...]
En fait j'ai interfacé une librairie de widgets ecrite en C avec une
arborescence de classe C++. La librairie de widget se charge d'effacer
les widgets, mais naturellement pas les instances C++ associée. Je me
charge donc de cet effacement.J'explore le widget parent contenant les
autres widgets et detruit les instances C++ associées. Mais quand
l'instance est membre d'une classe, il ne faut plus l'effacer, la
destruction de la classe proprietaire le fera automatiquement.


Ce sont donc des objets assez lourds, avec identité. J'aurais une
tendance à dire que la solution, c'est d'utiliser une usine pour
s'assurer que *toutes* les instances sont allouées dynamiquement. Et
quand un objet veut en contenir un autre, il déclare un pointeur, et il
crée l'autre objet au moyen de l'usine.

--
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
Christophe Lephay
a écrit dans le message de
news:
Ce sont donc des objets assez lourds, avec identité. J'aurais une
tendance à dire que la solution, c'est d'utiliser une usine pour
s'assurer que *toutes* les instances sont allouées dynamiquement. Et
quand un objet veut en contenir un autre, il déclare un pointeur, et il
crée l'autre objet au moyen de l'usine.


Je crois que le terme utilisé pour factory est fabrique plutôt qu'usine
(bien qu'on comprenne quand même de quoi il retourne)...

Chris

Avatar
kanze
"Christophe Lephay" wrote in message
news:<bg45o1$qvi$...
a écrit dans le message de
news:
Ce sont donc des objets assez lourds, avec identité. J'aurais une
tendance à dire que la solution, c'est d'utiliser une usine pour
s'assurer que *toutes* les instances sont allouées dynamiquement. Et
quand un objet veut en contenir un autre, il déclare un pointeur, et
il crée l'autre objet au moyen de l'usine.


Je crois que le terme utilisé pour factory est fabrique plutôt
qu'usine (bien qu'on comprenne quand même de quoi il retourne)...


C'est ce que j'avais cru aussi. Jusqu'à ce que j'ai posté en me servant
de « fabrique », et on m'a corrigé.

Au fond, la plus simple, c'est peut-être de dire simplement factory:-).

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