Salut,
J'ai un message d'erreur : "[Linker error] undefined reference to `handle<int>::current' "
Mon but est en gros de faire une classe qui represente un auto_ptr pour cela un ptr n'encapsule pas directement un T*, mais passe par un "handle" qui compte le nombre de pointeurs qui referencent l'objet pointee.
Code :
- template <typename T>
- struct handle { // Doit etre un signleton pour chaque instance differente de pt
- int nb; // nombre de references
- T* pt; // l'objet pointe par pt
- static handle<T>* current;
-
- static handle<T>* get_instance(T* _pt){
- // Si creation d'un pointeur sur le même objet
- if ( current != NULL && current->pt == _pt ) {
- // on augmente le nombre
- current->add_ref();
- // On renvoi le pointeur précedament enregistré
- return current;
- } else {
- return new handle<T>(1,_pt);
- }
- }
-
- // Constructeur
- handle(int _nb = 0, T* _pt = 0){
- nb = _nb;
- pt = _pt;
- current = this;
- }
- // Destructeur
- ~handle(){
- if ( pt != NULL ) delete pt;
- }
- // Ajout d'une reference
- void add_ref(){
- nb++;
- }
- // Suppression d'une reference
- void del_ref(){
- nb--;
- if( nb == 0 && pt != NULL ) delete pt;
- }
- // Accesseur sur pt
- T* get_pt(){ return pt; }
- // Get number
- int get_nb(){ return nb; }
- };
- // Classe representant un pointeur
- template <typename T>
- class ptr {
- public:
- // Constructeur
- ptr(T* _pt = 0){
- ref = handle<T>::get_instance(_pt);
- }
- // Destructeur
- ~ptr(){
- if ( ref != NULL ) delete ref;
- }
-
- // Operateur =
- ptr& operator=(const ptr<T>& r) {
- if ( (void*)&r != (void*)this ){ // si il n'y a pas d'affecations de this à lui meme
- ref->del_ref();
- ref = r.ref;
- }
- return *this;
- }
-
- int get_total(){
- return ref->get_nb();
- }
- // Operateur *
- // Operateur ->
-
- private:
- // Le handle
- handle<T>* ref;
- };
|
Donc dans le main L'erreur vient surement de l'appel : int i = 3; ptr<int> p1(&i);
J'ai testé de mettre la struct directement à l'interieur de la classe ptr mais sans succés.
Une idée ?
Message édité par Chronoklazm le 09-02-2006 à 23:04:14
---------------
Scheme is a programmable programming language ! I heard it through the grapevine !