next up previous contents
Next: Deuxième amélioration Up: Les classes d'une triangulation Previous: Première amélioration

Protection contre les dépassements de tableau

Pour se protéger contre les dépassements de tableau on utilise la classe template  suivante

#include <assert.h>

template <class T> class A{
 public: T *cc;    // tableau contenant les donn\'ees
         long size;// taille du tableau
                    
void init(long ssize);
T&  operator [] (long i) const
    {
      assert ( cc&&(i >= 0) && (i < size) );
      return cc[i];
    }    
 A(long csize = 0)
    {
      size = csize;
      if (size > 0 ) cc = new T[size]; 
      else cc = 0;
    } 
~A() { delete [] cc;size = 0; }  
void destroy() { delete [] cc;size = 0; cc=0; }
int no(const A<T>* pt) { return pt - cc;}
};

template <class T> void A<T>::init(long ssize)
    {
      assert( !cc );     //test pour pas creer 2 fois un objet
      assert( ssize );
      size=ssize;
      cc= new T[size];              
      assert(cc != 0);   //test inutile avec new_handler
    }

Toute création de tableau doit passer maintenant par les classes A type.



Pironneau Olivier
Jeudi 26 juin 1997 07:15:20