Ваша структура не следует правилу 3/5/0 , в частности, отсутствует деструктор для delete[]
текущего array
при разрушении самой структуры:
struct Structure {
double* array = new double[1];
int capacity = 1;
~Structure() { delete[] array; } // <-- add this!
/* also, you should add these, too:
Structure(const Structure &)
Structure(Structure &&)
Structure& operator=(const Structure &)
Structure& operator=(Structure &&)
*/
};
Вы действительно должны использовать std::vector<double>
вместо использования new[]
напрямую. std::vector
обрабатывает все, что вы пытаетесь сделать вручную, и делает это безопаснее, чем вы:
#include <vector>
struct Structure {
std::vector<double> array;
Structure() : array(1) {}
};
void resize (Structure& structure) {
structure.array.resize(structure.array.size() * 2);
}
Или:
#include <vector>
struct Structure {
std::vector<double> array;
Structure() { array.reserve(1); }
};
void resize (Structure& structure) {
structure.array.reserve(structure.array.capacity() * 2);
}
В зависимости от того, как вы на самом деле используете array
.