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.