struct geopoint {
double x;
double y;
const char * description;
};
struct georectangle {
double left_x;
double bottom_y;
double right_x;
double top_y;
const char * description;
};
struct geomap {
vector < geopoint * > geopointList;
vector < georectangle * > georectangleList;
};
struct geomap * geomap_new() {
struct geomap * newGeoMap = (struct geomap * ) malloc(sizeof(struct geomap));
return newGeoMap;
}
void geomap_delete(struct geomap * m) {
printf("%lu\n", m->geopointList.size());
for (int i = 0; i < m->geopointList.size(); i++) {
free(m->geopointList[i]);
}
printf("%lu\n", m->georectangleList.size());
for (int i = 0; i < m->georectangleList.size(); i++) {
free(m->georectangleList[i]);
}
free(m);
}
int main () {
struct geomap * m = geomap_new();
assert(m);
geomap_delete(m);
}
Я новичок в C ++ и меня очень смущает инициализация объектов на этом языке ... В Java вы всегда используете ключевое слово new
, когда инициализируете объект не примитивного типа. В C ++ мне кажется, что иногда конструктор по умолчанию выполняется автоматически, а иногда нет.
В приведенном выше фрагменте кода с помощью функции geomap_new()
я создаю экземпляр struct geomap
, который содержит два вектора указателей.
Мои вопросы следующие:
Как мне инициализировать эти два вектора, чтобы они были fre sh новыми пустыми векторами ? В Java я бы использовал ключевое слово new
... Есть ли такая вещь и в C ++? Я задаю этот вопрос, потому что, если я не инициализирую их каким-либо образом, когда я печатаю размер этих двух векторов в функции geomap_delete
, размер geopointList
равен 0, как и должно быть, но размер georectangleList
- это большое случайное число. Мне кажется, что инициализируется только первый вектор.
Другой вопрос ...
Если начать добавлять много векторов, эти векторы начнут расти. Возможно ли, что их размер станет больше, чем размер самой структуры? Структура собирается на realloc
?