fixed memory leak in operator=

This commit is contained in:
Dave Goodwin 2005-01-06 11:09:19 +00:00
parent 349e7c3c46
commit 468c0173d9

View file

@ -50,13 +50,11 @@ std::ostream& operator<<(std::ostream& s, const ctvector_fp& v) {
}
ctvector_fp::ctvector_fp(const ctvector_fp& x) {
_data = 0;
if (x._alloc > 0) {
_data = new value_type[x._alloc];
copy(x._data, x._data + x._alloc, _data);
}
else {
_data = 0;
}
_size = x._size;
_alloc = x._alloc;
}
@ -64,13 +62,12 @@ std::ostream& operator<<(std::ostream& s, const ctvector_fp& v) {
ctvector_fp ctvector_fp::operator=(const ctvector_fp& x) {
if (this == &x) return *this;
if (_data) delete[] _data;
_data = 0;
if (x._alloc > 0) {
if (_alloc > 0) delete[] _data;
_data = new value_type[x._alloc];
copy(x._data, x._data + x._alloc, _data);
}
else {
_data = 0;
}
_size = x._size;
_alloc = x._alloc;
return *this;
@ -120,92 +117,6 @@ std::ostream& operator<<(std::ostream& s, const ctvector_fp& v) {
void ctvector_fp::clear() { fill(_data, _data + _size, 0.0); resize(0); }
// //-------------------------------------//
// // ctvector_float //
// //-------------------------------------//
// ctvector_float::ctvector_float(size_t n) : _size(0), _alloc(0), _data(0) {
// resize(n);
// }
// ctvector_float::ctvector_float(size_t n, value_type v0)
// : _size(0), _alloc(0), _data(0) {
// resize(n, v0);
// }
// ctvector_float::ctvector_float(const ctvector_float& x) {
// if (x._alloc > 0) {
// _data = new value_type[x._alloc];
// copy(x._data, x._data + x._alloc, _data);
// }
// else {
// _data = 0;
// }
// _size = x._size;
// _alloc = x._alloc;
// }
// ctvector_float ctvector_float::operator=(const ctvector_float& x) {
// if (this == &x) return *this;
// if (_data) delete[] _data;
// if (x._alloc > 0) {
// _data = new value_type[x._alloc];
// copy(x._data, x._data + x._alloc, _data);
// }
// else {
// _data = 0;
// }
// _size = x._size;
// _alloc = x._alloc;
// return *this;
// }
// ctvector_float::~ctvector_float() {
// if (_data) delete[] _data;
// _data = 0;
// }
// void ctvector_float::resize(size_t n) {
// size_t new_alloc = n+1;
// value_type* newdata = new value_type[new_alloc];
// size_t datalen = (n > _size ? _size : n);
// if (_data) {
// copy(_data, _data + datalen, newdata);
// }
// if (_data) delete[] _data;
// _data = newdata;
// _alloc = new_alloc;
// _size = n;
// }
// void ctvector_float::resize(size_t n, value_type v0) {
// size_t new_alloc = n+1;
// value_type* newdata = new value_type[new_alloc];
// fill(newdata, newdata + new_alloc, v0);
// size_t datalen = (n > _size ? _size : n);
// if (_data) {
// copy(_data, _data + datalen, newdata);
// }
// if (_data) delete[] _data;
// _data = newdata;
// _alloc = new_alloc;
// _size = n;
// }
// void ctvector_float::push_back(value_type x) {
// size_t loc = _size;
// if (_size == _alloc) {
// resize(2*_alloc);
// }
// _data[loc] = x;
// _size = loc + 1;
// }
// void ctvector_float::clear() { fill(_data, _data + _size, 0.0); resize(0); }
//-------------------------------------//
// ctvector_int //
//-------------------------------------//
@ -231,6 +142,8 @@ std::ostream& operator<<(std::ostream& s, const ctvector_fp& v) {
ctvector_int ctvector_int::operator=(const ctvector_int& x) {
if (this == &x) return *this;
if (_data) delete[] _data;
_data = 0;
if (x._alloc > 0) {
_data = new value_type[x._alloc];
copy(x._data, x._data + x._alloc, _data);
@ -241,7 +154,7 @@ std::ostream& operator<<(std::ostream& s, const ctvector_fp& v) {
}
ctvector_int::~ctvector_int() {
if (_alloc > 0) delete[] _data;
if (_data) delete[] _data;
_data = 0;
}