Реальная точка динамического размещения состоит в том, что вы контролируете время жизни объектов, которые выделяются.Динамически распределяемые объекты существуют, пока вы не освободите их.На самом деле это не имеет ничего общего с массивами, хотя это часто тот контекст, в котором новичков впервые учат распределению.
Рассмотрим эти две функции
int* bad()
{
int x = 123;
return &x;
}
int* good()
{
int* x = new int(123);
return x;
}
Обе функции создают int и возвращаютуказатель на этот int.
Функция bad
неверна, потому что переменная x уничтожается при выходе из функции, поэтому она возвращает указатель на объект, который был уничтожен.
good
функция создает int динамически, этот объект никогда не будет уничтожен (если только программа не удалит его).Так что эта функция корректна.
Между прочим, int size; ... int A[size][size];
не является допустимым C ++.Некоторые компиляторы позволяют это, но другие компиляторы этого не делают.