Я немного путаюсь по теме выделения объектов в куче против выделения на стеке и когда и как следует вызывать delete().
Например, у меня есть класс Vector. Я хотел бы создать массив из них.
Я мог бы сделать это
Vector** v = new Vector*[100]; //create an array of 100 pointers to 100 Vector objects
Это, как я понял, выделил бы все (ну кроме указателей адресов) на кучу? Поэтому для свободной памяти мне нужно:
for (int i = 0; i < 100; ++i)
{
delete(v[i]);
}
delete(v);
ИЛИ просто
delete(v);
достаточно?
Теперь еще один пример:
Vector* v = Vector[100];
Что происходит в этом случае? Где происходит распределение? Куча или стек? Мне еще нужно позвонить
delete(v);
Но это не все вопросы, извините за длинный пост.
Пример:
class Vector
{
int x, y, z;
}
Vector* v = new Vector();
где x, y, z выделены? Куча или стек?
или как об этом:
class Vector2
{
int items[10];
}
Vector2* v2 = new Vector2();
где выделены пункты [10]? Как удалить v2? Нужен ли мне индивидуальный деструктор?
И последнее, но не менее важное: об этом:
class Vector3
{
int* items;
}
Vector3 v3 = Vector3();
Где хранится указатель на элементы? кучу или стек? Как удалить это?
Спасибо и извините за длинный вопрос. У меня были проблемы с этим материалом в течение длительного времени, и я не мог найти полное объяснение на линии.