1

yop,

J'ai un objet utilisé par plusieurs "modules" de mon programme.
Ils ont tous un pointeur vers cet objet, mais un seul en est le créateur (et le destructeur).

Le truc, c'est que c'est pas forcément le créateur/destructeur qui est fermé en dernier.

J'ai donc pensé à utiliser un compteur de référence. Mais ça oblige les modules à faire ou un delete, ou un --objet->reference;
C'est crade, c'est pas à eux de choisir, je voudrais qu'ils fassent tous un delete, ils ont pas à savoir que cet objet est partagé, non ?

Alors, comment s'y prend-on habituellement, proprement, dans un cas comme ça ? On utilise un "gestionnaire" externe, qui compte les références sur l'objet et prend les bonnes décisions ?

Merci d'avance. smile

2

ça t'irait par exemple ? Sinon Brunni avait parlé il y a un moment d'une solution perso pour ce genre de cas ; il me semble que c'était techniquement proche avec une syntaxe différente, je n'étais pas convaincu perso mais ça répond surement également à ton besoin. Zerosquare saura surement retrouver le topic en un rien de temps si jamais smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

Zeph > shared_ptr fait tout simplement du comptage de référence, non ?
Y a-t-il d'autres méthodes (par pure curiosité) ?
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4

Oué j'aurais aussi dirigé vers un shared pointer. (en java je laisse le garbage collecteur se démerder, je dis ça, je dis rien embarrassed)

5

En effet shared_ptr semble être ce qu'il te faut. Tant que tu ne fait pas de référence cyclique.
avatar

6

Ah, c'est exactement ça qu'il me faut, j'avais déjà vu ce terme passer, mais j'en avais jamais eu besoin, merci beaucoup top

7

Pour info, vu que j'utilise Qt, je vais utiliser la variante maison de cet outil : http://doc.qt.io/qt-5/qsharedpointer.html

8

flanker > en l'occurrence oui je pense que ça fait du comptage de référence ; pour les autres approches je pense en effet qu'il vaut mieux aller googler "garbage collector" et regarder les solutions proposées ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

9

ok, je me demandais s'il y avait d'autres façons plus exotiques ^^
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

10

Il y a déjà un bon paquet de solutions exotiques qui ont été explorées dans ce domaine, quand même ^^ Ça ne veut pas dire qu'il n'en reste pas, mais il y a déjà de quoi faire smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

11

Zeph (./2) :
Sinon Brunni avait parlé il y a un moment d'une solution perso pour ce genre de cas ; il me semble que c'était techniquement proche avec une syntaxe différente, je n'étais pas convaincu perso mais ça répond surement également à ton besoin. Zerosquare saura surement retrouver le topic en un rien de temps si jamais smile.gif?66
Il suffit de demander hehe
topics/156501-gestion-de-memoire-par-refcount
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

12

Merci ! grin

13

Folco (./7) :
Pour info, vu que j'utilise Qt, je vais utiliser la variante maison de cet outil : http://doc.qt.io/qt-5/qsharedpointer.html

Bon, ceci dit, j'arrive pas à faire un truc, initialiser un QSharedPointer avec un pointeur existant. Je lis surement mal la doc du constructeur, parce que je comprends pas trop pourquoiça marche pas : http://doc.qt.io/qt-5/qsharedpointer.html#QSharedPointer-2

J'écris ça : void LadderData::newPlayer(Player* player) { player_list.append(QSharedPointer<Player*>(player)); ... }
J'ai donc ça comme erreur :
/mnt/Data/prog/TBL/ladderdata.cpp:54: error: no matching function for call to 'QSharedPointer<Player*>::QSharedPointer(Player*&)'
     player_list.append(QSharedPointer<Player*>(player));
                                                      ^

J'arrive pas à savoir si c'est ma syntaxe qui est foireuse, ou l'usage de la classe.

Merci pour votre coup d'oeil affûté happy

14

Pour la destruction des objets, j'ai un outil imparrable :

mf90


et crois moi il sentira rien....



GT dehors
avatar
Accrochez vous ca va être Cerebral !!

15

Je tenterais bien un truc dans le genre :
QSharedPointer<Player> player(new Player) ;
...

void LadderData::newPlayer(const QSharedPointer<Player>& player)
{
    player_list.append(player);
    ...
}


Pas la peine de dire que c'est un pointeur dans le QSharedPointer, car c'est une classe faite justement pour encapsuler un pointeur, donc le type suffit (comme avec un auto_ptr, d'ailleurs)
Quant à l'usage, on n'utilise sans doute pas le pointeur directement mais le QSharedPointer, sinon le compteur de référence est perdu (il y a sans doute un accesseur pour récupérer le pointeur directement quand même en cas de besoin ponctuel et aussi * doit être surchargé pour renvoyer l'objet pointé.
(Mmm, tu mixes des _ et des chameaux ? cheeky)

16

Et sinon, comme tu travailles avec Qt, je te conseille de jeter un coup d'œil sur QSharedData et QSharedDataPointer, ces classes permettent de créer des objets où le pointeur partagé est implicite et où tu n'as donc pas besoin de travailler avec des QSharedPointer partout. (C'est comme ça que fonctionnent QString etc.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

17

Ok, je vais voir ça. Ah, si ça peut éviter de me faire chier pour sérialiser/désérialiser aussi, ça sera parfait. smile

18

Bon, les QSharedDataPointer, ça a l'air d'etre fait pour du Copy On Write, c'est pas ce que je veux. Je veux plusieurs pointeurs vers un objet unique, et que tous les pointeurs "sachent" quand cet objet a été détruit.

19

Pen² -> t'as raison, c'est comme ça que je vais faire, mon problème de design était là. top
Pen^2 (./15) :
(Mmm, tu mixes des _ et des chameaux ? cheeky)

C'est la merde :

nomDeMéthode();
NomDeFonction();
MACRO
variable

Ca, c'est ok.
et ensuite, j'ai le choix :

variablesupergrandequifaitchier
VariableSuperGrandeQuiFaitChier
variable_super_grande_qui_fait_chier

Je suis pas fixé sad

(ps> je sais, GT, en assembleur, les registres font pas chier embarrassed grin)

20

Tiens, oué, marrant de différencier à ce point, mais pourquoi pas, après tout.

21

(register void *a1, *a2, ... embarrassed)

22

ayé, je sais !!!
vARIABLEsUPERgRANDEqUIfAITcHIER

#triclasse#

23

Tu es battu:

http://ashutoshmehra.net/blog/2010/02/long-function-names/

RtlWriteDecodedUcsDataIntoSmartLBlobUcsWritingContext [wcp.dll], with 53-characters, was the longest one (but this function is not documented)
(52) ConvertSecurityDescriptorToStringSecurityDescriptor{A,W} [advapi32.dll], the function that Raymond Chen admitted was the reason for his post on security descriptors.
(52) ConvertStringSecurityDescriptorToSecurityDescriptor{A,W} [advapi32.dll], the complement of the above.
(50) CreatePrivateObjectSecurityWithMultipleInheritance [advapi32.dll], another security function.
(50) CertCreateCTLEntryFromCertificateContextProperties [crypt32.dll].
(50) EapHostPeerQueryUIBlobFromInteractiveUIInputFields [eappcfg.dll].
(49) AccessCheckByTypeResultListAndAuditAlarmByHandle{A,W} [advapi32.dll], yet another security API — I guess the security API programmers get a good kick from long names, just like me!
(47) GetNumberOfPhysicalMonitorsFromIDirect3DDevice9 [Dxva2.lib].
(43) SetupRemoveInstallSectionFromDiskSpaceList{A,W} [Setupapi.dll].And just so that no one thinks I’m making these up, I’ve linked to their docum
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

24

Folco (./22) :
ayé, je sais !!!
vARIABLEsUPERgRANDEqUIfAITcHIER

#triclasse#

ou encore mieux : vArIAblEsUpErgrAndEqUIfAItchIEr
Ça porte encore mieux son nom.
avatar

25

grin

26

-C+c ?

27

C'était l'idée en effet.
avatar

28

Folco (./18) :
Bon, les QSharedDataPointer, ça a l'air d'etre fait pour du Copy On Write, c'est pas ce que je veux. Je veux plusieurs pointeurs vers un objet unique, et que tous les pointeurs "sachent" quand cet objet a été détruit.

QExplicitlySharedDataPointer alors. smile
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

29

Folco (./19) :
variablesupergrandequifaitchier
VariableSuperGrandeQuiFaitChiervariable_super_grande_qui_fait_chier

La convention en Qt (comme en Java d'ailleurs) est variableSuperGrandeQuiFaitChier.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

30

Merci Kevin, j'irai voir. smile

• Folco retourne bricoler