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
| class b {
a **tab; // tableau de pointeurs (b alloue le tableau et initialise ou alloue les pointeurs)
blabla;
public:
b() { tab = new (a*)[10]; for ( int i=0; i <10; ++i ) tab[i] = new a; }
~b() { detruireElements(); }
void detruireElements() { if ( tab ) for ( int i=0; i <10; ++i ) delete tab[i]; delete[] tab; }
// et ici il devient impératif de définir ou interdire au moins les copies
b( const b& x ) = delete; // création par copie interdite par exemple
b& operator=( const b& x ) {
if ( &x != this ) { // l'opérateur de copie, peut par exemple
// détruire les éléments de *this
// allouer this->tab et les éléments de this->tab[]
// copier les éléments de x.tab[] dans this->tab[]
}
return *this;
}
// et on peut aussi facultativement optimiser les opérations de transfert
b( b&& x ) : tab(x.tab) { x.tab=0; }
b& operator=( b&& x ) {
detruireElements();
tab = x.tab;
x.tab = 0;
return *this;
}
}; |
Partager