1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-11-24 19:55:53 +01:00

Properly handle self-asignments

This commit is contained in:
Martin Tůma 2019-07-10 23:08:58 +02:00
parent 2f24bb5462
commit aba78f3baa
2 changed files with 22 additions and 18 deletions

View File

@ -37,21 +37,23 @@ Matrix::Matrix(const Matrix& M)
Matrix &Matrix::operator=(const Matrix &M) Matrix &Matrix::operator=(const Matrix &M)
{ {
if (_h != M._h || _w != M._w) { if (this != &M) {
if (!isNull()) if (_h != M._h || _w != M._w) {
delete[] _m; if (!isNull())
delete[] _m;
_h = M._h; _w = M._w; _h = M._h; _w = M._w;
if (isNull()) if (isNull())
_m = 0; _m = 0;
else else
_m = new double[_h * _w]; _m = new double[_h * _w];
}
for (size_t i = 0; i < _h; i++)
for (size_t j = 0; j < _w; j++)
m(i,j) = M.m(i,j);
} }
for (size_t i = 0; i < _h; i++)
for (size_t j = 0; j < _w; j++)
m(i,j) = M.m(i,j);
return *this; return *this;
} }

View File

@ -128,13 +128,15 @@ Projection::~Projection()
Projection &Projection::operator=(const Projection &p) Projection &Projection::operator=(const Projection &p)
{ {
delete _ct; if (this != &p) {
delete _ct;
_gcs = p._gcs; _gcs = p._gcs;
_units = p._units; _units = p._units;
_ct = p._ct ? p._ct->clone() : 0; _ct = p._ct ? p._ct->clone() : 0;
_geographic = p._geographic; _geographic = p._geographic;
_cs = p._cs; _cs = p._cs;
}
return *this; return *this;
} }