Je suis en train de m'arracher les cheveux à comprendre le code d'un autre développeur.
Il a définit une classe ou tout est privé, si bien qu'on ne peut rien à faire, ni l'instancier, ni en appeler une méthode. Je ne vois pas bien l'intérêt d'une telle classe... Il semble bien qu'il s'agisse d'un singleton, géré par un "smart pointer" qui compte le nombre de références.
Pour être plus clair, voici ce que j'ai:
1) La classe de pointeur intelligent (que j'ai réussi à comprendre)
2) La fameuse classe entièrement privée (simplifiée bien sûr)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 template <class T> class SmartPtr { public: SmartPtr(); SmartPtr(T* ptr); SmartPtr(const SmartPtr<T>& reference); ~SmartPtr(); T* operator->() const; T& operator*() const; operator const T*() const; operator T*() const; operator const void*() const; operator void*() const; SmartPtr<T>& operator=(const SmartPtr<T>& reference) SmartPtr<T>& operator=(T* ptr); // Manipulation du compteur de références SINT32 AddReference(); SINT32 Release(); SINT32 GetReferenceCount() const; protected: T* myPointer; };
Comme ni public, ni protected, ni private n'est précisé, c'est "private" qui est pris par défaut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 class MyClass { static void* operator new(unsigned int); static void operator delete(void*); static class SmartPtr<MyClass> New(); int AddReference(); int Release(); int GetReferenceCount(); // // Autres méthodes... // MyClass(class MyClass&); MyClass(); virtual ~MyClass(); virtual class SmartPtr<MyClass> Clone(); };
Il y a bien une méthode static qui semble être là pour créer une nouvelle instance, mais comme elle est privée, elle est inaccessible.
Par ailleurs, j'ai accès de façon globale à une fonction:
Mais là encore, je ne peux pas l'utiliser car le compilo n'est pas content, il dit que le destructeur de "MyClass" n'est pas accessible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 class SmartPtr<MyClass> MyClass_New();
Donc je nage... Si quelqu'un peut m'expliquer comment instancier "MyClass", ou mieux, comment exploiter l'instance existante, je suis preneur.
Merci !!
Eric
Partager