salut,
as tu défini proprement un constructeur de copie par défaut et un operateur d'affectation ?
Matrix(const Matrix& b);
Matrix& operator = (const Matrix& b);
dans le cas contraire, ca va planter dans le destructeur si par
exemple, tu fais une affectation entre deux matrices ou que tu passes
une matrice comme parametre d'une fonction ou bien que tu fais un
return d'une matrice.
la raison est que tu aurais deux matrices dont le champ _data pointe
vers la meme zone memoire (si tu n'as pas défini le constructeur de
copie ou l'operateur =, par défaut l'affectation ou la copie se fait en
recopiant betement les champs de ta classe), et que cette zone memoire
est alors détruite deux fois (et plantage la deuxieme fois).
tu dois par exemple définir l'affectation entre deux matrices de cette maniere:
template < class H >
inline Matrix& operator = (const Matrix& b)
{
for (int i = 0; i < _row; i++)
delete[] _data[i];
delete[] _data; _data = NULL;
_row = b._row;
_column = b._column;
_data = new H*[_row];
for (int i = 0; i < _row; i++)
{
_data[i] = new H[_column];
*(_data[i]) = *(b._data[i]);
}
return *this;
}
(et pareil pour le constructeur par copie)
sinon, c'est sur que ca n'a rien à voir avec les template
a+