2010-11-29 4 views
0

В чем разница между этим: -простой вопрос динамического распределения

width = new int; 

А это: -

int width; 

т.е. того, что использование динамического распределения в первом коде?

+2

Возможно, вы захотите изменить «width = new int;» to "int * width = new int;" :) – Palmik 2010-11-29 21:02:53

+1

Вам, вероятно, стоит присесть с книгой C++ для начинающих, поскольку вам явно не хватает оснований указателей. – Falmarri 2010-11-29 21:15:16

ответ

3

Прежние выделяет динамически один int и возвращает его адрес в памяти (который записывается в переменную width и вы должны освободить его позже с delete. Она не существует до сих пор.

Последнее объявляет локальную переменную тип int, который становится недействительным, когда он покидает текущую область.

0

один выделяется на кучу, а другой на стек, один из которых вам нужно управлять, а другой - «автоматический», один из которых вы получаете через де-ссылку другой вы не ...

EDIT: по отношению к вашему второму вопросу не так много ... есть несколько случаев, но тогда вы почти всегда будете использовать умный указатель, если нет, вы играете с огнем ... :)

2

Что ты имел в виду, вероятно:

int* w1 = new int; 
int w2; 

Первый выделяется в куче, и вы должны заботиться о thememory с оператором delete.

Второе находится в стеке и перестает существовать после того, как оно выходит из сферы действия (так что вам не нужно заботиться о себе).

0

Первый выделяет пространство для целого числа в куче и выделяет пространство для удержания указателя на стеке. Он также инициализирует ширину до 0. Пространство, выделенное на куче, должно быть выделено программистом (дополнительная нагрузка). Доступ к этому пространству в куче можно получить из любого места, пока указатель на него доступен, а память не освобождается.

Вторая декларация просто выделяет пространство в стеке и автоматически освобождается, когда переменная выходит за пределы области видимости. Значение ширины - мусор.

0

Это очень редко, что динамическое распределение int было бы «полезным», хотя я бы не сказал «никогда».

Динамическое распределение полезно для больших сложных структур данных, чье время жизни и/или размер неизвестно во время компиляции, или просто слишком большие, чтобы положить на стек.