Bonjour,
Je voulais savoir si quelqu'un avait déjà implémenter une liste chainée avec des "smart pointers" ?
Je pensais faire quelque chose comme ça (tiré du chapitre 16 de la FAQ C++ Lite):
Code :
- class FredPtr;
- class Fred {
- public:
- static FredPtr create() { return new Fred(); }
- static FredPtr create(int i, int j) { return new Fred(i,j); }
- // ...
- private:
- friend class FredPtr; // Une classe amie
- unsigned count_;
- Fred():count_(0);
- Fred(int i, int j):count_(0);
- FredPtr Suivant;
- // ...
- };
- class FredPtr {
- public:
- Fred* operator-> () { return p_; }
- Fred& operator* () { return *p_; }
- FredPtr(Fred* p) : p_(p) { ++p_->count_; } // p ne doit pas valoir NULL
- ~FredPtr() { if (--p_->count_ == 0) delete p_; }
- FredPtr(const FredPtr& p) : p_(p.p_) { ++p_->count_; }
- FredPtr& operator= (const FredPtr& p)
- { // NE CHANGEZ PAS L'ORDRE DE CES INSTRUCTIONS!
- // (Cet ordre gère correctement le cas de l'auto-affectation)
- ++p.p_->count_;
- if (--p_->count_ == 0) delete p_;
- p_ = p.p_;
- return *this;
- }
- private:
- Fred* p_; // p_ ne vaut jamais NULL
- };
|
Mais lors de la compilation il me met une erreur comme quoi le type de Suivant n'est pas défini (invalid use of undefined type et forward declaration of 'struct FredPtr') et le résultat des fonction create non plus...en somme il ne reconnait pas la classe FredPtr dans la classe Fred.
Qu'ai je fait de mal ?
Question subsidiaire : est ce une bonne idée de faire une liste chainée avec des "smart pointers" ?
Message édité par Alban44 le 04-04-2006 à 20:32:12